ঘূর্ণন পদ্ধতি অবহ্রাসিত, 'didRotateFromInterfaceOrientation' এর সমতুল্য?


137

আমি viewWillTransitionToSizeআইওএস 8-এ চালু হওয়া নতুন পদ্ধতিটি বাস্তবায়নের চেষ্টা করছি (অন্যান্য সমস্ত ঘূর্ণন পদ্ধতি হ্রাস করা হয়েছে)। আমি didRotateFromInterfaceOrientationএখনকার সমতুল্যটি কি তা জানতে চাই কারণ আমাদের অনেকগুলি ক্লিন আপ কার্য সম্পাদন করতে হবে এবং আমি কোনও ব্লক দেখতে পাচ্ছি না যা আমরা UIViewControllerTransitionCoordinatorযখন নতুন অবস্থাতে 'ট্রানজিশন' ডাকে তখন ডাকা যেতে পারে can আকার শেষ। ধন্যবাদ।

উত্তর:


255

ঠিক আছে এটি খুঁজে পেয়েছে, কেবল animateAlongsideTransition:completion:পাসের পদ্ধতিটি ব্যবহার করতে হবে UIViewControllerTransitionCoordinator

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{   
    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
    {
        UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
        // do whatever
    } completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
    { 

    }];

    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}

এই পদ্ধতিটি কি আমরা প্রতিবার ডট্রোটেটফ্রোমআইন্টারফেস ওরিয়েন্টেশন এর মতো ঘোরানোর সময় কল করবে ?. আপনি যে পদ্ধতিটি ব্যবহার করেছেন তা দয়া করে আমাকে ভাগ করে নিতে পারেন? ধন্যবাদ
জিজ্ঞাসা করুন 123

2
হ্যা এটা হবে. এটি আমিই করি: - (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) { UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; // do whatever } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { }]; [super viewWillTransitionToSize: size withTransitionCoordinator: coordinator]; }
অদ্ভুত

1
ধন্যবাদ - আমি কিছুটা সময় বাঁচানোর জন্য উত্তর হিসাবে একটি দ্রুত সংস্করণ যুক্ত করব
ডগকফি

3
আইটিওএস-এ স্ট্যাটাসবারিয়েন্টেশন হ্রাস করা হয় 9.। আর কী কী বিকল্প রয়েছে?
দীপক শর্মা

1
@ প্রদীপশর্মা পার্টিতে আমি একটু দেরি করেছি, তবে আপনি ব্যবহার করতে পারেন [UIDevice currentDevice].orientation। এছাড়াও আপনি নল এই মধ্যে করতে পারেন UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)বা UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)। আশাকরি এটা সাহায্য করবে!
জেফ

70

উত্তরটির সুইফট সংস্করণটি আজব

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {

    coordinator.animateAlongsideTransition({ (UIViewControllerTransitionCoordinatorContext) -> Void in

        let orient = UIApplication.sharedApplication().statusBarOrientation

        switch orient {
        case .Portrait:
            println("Portrait")
            // Do something
        default:
            println("Anything But Portrait")
            // Do something else
        }

        }, completion: { (UIViewControllerTransitionCoordinatorContext) -> Void in
            println("rotation completed")
    })

    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
}

এটি আশ্চর্যজনক কারণ আমি এটিকে আমার ভিউকন্ট্রোলারটিতে রেখেছি এবং এটি আমার লগতে printকিছুই দেয় নি। আমার ধারণা, কারণ এই পদ্ধতিটি বলা হচ্ছে না। এটি কাজ করার জন্য প্লাগ করা দরকার এমন অন্য যে কোনও বিষয় আপনি ভাবতে পারেন?
ট্রিপ

আমি কেবল এটি একটি খালি প্রকল্পে (ইউনিভার্সাল অ্যাপ) যুক্ত করেছি এবং এটি কিছু যুক্ত করার প্রয়োজন ছাড়াই দুর্দান্ত কাজ করে। পদ্ধতির একেবারে গোড়ার দিকে একটি লগ স্টেটমেন্ট রেখে দিতে এবং এটির জন্য ডাকা হচ্ছে কিনা তা দেখুন। আপনার কিছু যোগ করার দরকার হবে এমন কিছুই আমি ভাবতে পারি না। আপনি কোন আইওএস চালাচ্ছেন?
ডগকফি

@ ডগকফি..আর কল হচ্ছে না। সিমুলেটারের সাথে কি কিছু করার আছে?
সতী

@ স্যাটি সিমুলেটারেও কাজ করে - তখনই আবার পরীক্ষা করা হয়েছে। আশানুরূপ কাজ করে।
ডগকফি

1
আইটিওএস-এ স্ট্যাটাসবারিয়েন্টেশন হ্রাস করা হয় 9.। আর কী কী বিকল্প রয়েছে?
দীপক শর্মা

10

আইওএস 10.3 এবং সুইফট 3

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {

        coordinator.animate(alongsideTransition: { (_) in
            let orient = newCollection.verticalSizeClass

            switch orient {
            case .compact:
                print("Lanscape")///Excluding iPads!!!

            default:
                print("Portrait")
            }
        }, completion: { _ in
            print("rotation completed")
        })

        super.willTransition(to: newCollection, with: coordinator)
    }

আপনার অ্যানিমেশন কেন দরকার? আপনি সরাসরি 'নতুন সংগ্রহ' পরীক্ষা করতে পারবেন না?
সায়ানাইড

@ সায়ানাইড আমার সাথে অ্যানিমেশন সিঙ্ক করতে
মাইক গ্লুখভ

7

সুইফ্ট 3 এ গৃহীত উত্তর :

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
    coordinator.animate(alongsideTransition: { (_) in
        let orient = UIApplication.shared.statusBarOrientation

        switch orient {
        case .portrait:
            print("Portrait")
        // Do something
        default:
            print("Anything But Portrait")
            // Do something else
        }
    }, completion: { (UIViewControllerTransitionCoordinatorContext) -> Void in
      print("rotation completed")
    })

    super.willTransition(to: newCollection, with: coordinator)
}

এটা আমার জন্য ভাল কাজ করে 👍


আইওএস 10 এ আমার জন্য কাজ করে না - এটি পুরানো ওরিয়েন্টেশনটি প্রিন্ট করে, নতুনটি নয়।
ভাদাদাদি কার্টিক

1
@ ভাদাদি কার্টিক কারণ আপনার ব্যবহার করা উচিতlet orient = newCollection.verticalSizeClass switch orient { case .compact: print("Lanscape") // Do something default: print("Portrait") // Do something else }
মাইক গ্লুখভ

5

যেহেতু প্রশ্নটি ছিল: এর সমতুল্য কী ছিল didRotateFromInterfaceOrientation

আমি ভেবেছিলাম আমি নীচের কোডটি অবদান রাখব:

@implementation ViewController
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
    [super traitCollectionDidChange:previousTraitCollection];
    if (previousTraitCollection.verticalSizeClass == UIUserInterfaceSizeClassRegular) {
        NSLog(@"User has rotated to landscape");
    } else if (previousTraitCollection.verticalSizeClass == UIUserInterfaceSizeClassCompact) {
        NSLog(@"User has rotated to portrait");
    }
}
@end

আমি সিমুলেটারে একটি আইফোনে পরীক্ষা করছিলাম, তবে আমি আইপ্যাড ব্যবহার করে পরীক্ষা করে নিলে যেহেতু বৈশিষ্ট্য সংকলন পরিবর্তন হবে না আমার প্রিন্ট স্টেটমেন্টগুলি চালিত হবে না।

এটি আশ্চর্যের বিষয় কারণ অ্যাপল ঠিক একই পরামর্শ দেয় :

- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
    [super traitCollectionDidChange: previousTraitCollection];
    if ((self.traitCollection.verticalSizeClass != previousTraitCollection.verticalSizeClass)
        || self.traitCollection.horizontalSizeClass != previousTraitCollection.horizontalSizeClass)) {
        // your custom implementation here
    }
}

দ্বিতীয় কোড স্নিপেটে একটি অনুপস্থিত বন্ধনী রয়েছে
আন্তন ডুজেনকো

উল্লম্ব এবং অনুভূমিক উভয় শ্রেণীই পূর্ণ স্ক্রিনে নিয়মিত যেখানে আইপ্যাডে এটি কাজ করে?
দীপক শর্মা

আপনার কোডটি অ্যাপলের মতো নয়, আপনি কেবল উল্লম্ব আকারের শ্রেণিটি পরীক্ষা করছেন।
এডিজি

কিছুক্ষণ হয়ে গেল, দেখে মনে হচ্ছে লিঙ্কটির সামগ্রী বদলে গেছে।
এনওয়াইসি টেক ইঞ্জিনিয়ার

3

[[UIApplication sharedApplication] statusBarOrientation]আইওএস 9-এ অবহিত করা হয়েছে আপনাকে বিভিন্ন ডিভাইসের জন্য ইউআইআরট্রেটক্লিকেশনটির বিরুদ্ধে পরীক্ষা করতে হবে ।

  override func willTransitionToTraitCollection(newCollection: UITraitCollection, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {

    if newCollection.containsTraitsInCollection(UITraitCollection(verticalSizeClass: .Regular)) {
      ...
    }
  }

6
কেবল সেটারটিকেই হ্রাস করা হয়েছে। অ্যাপলের একজন কর্মচারী পোস্ট করেছিলেন, "স্ট্যাটাস বারের ওরিয়েন্টেশনটি পড়া অবনতি হয় না, কেবল এটিই লেখা হয় you এটি আপনি যদি জেটে দেখেন তবে আমরা কীভাবে শিরকটি তৈরি করেছি তাতে একটি ত্রুটি হতে পারে" " ( ফোরাম.ডিফলার.এপল.com / থ্রিড / 12937 )
গ্রাহাম

যদিও প্রাপ্তকারীটিও অবহেলিত নয়। ডকুমেন্টেশন অনুযায়ী এটি।
গ্রুট

0

আইপ্যাডে কোনও বৈশিষ্ট্য সংগ্রহের পরিবর্তন নেই তাই আপনি এখানে শুরু এবং সমাপ্তি থেকে ঘূর্ণনটি কীভাবে আবিষ্কার করবেন তা এখানে। এখানে সুইফট 5 বাক্য গঠন:

override func viewWillTransition(to size: CGSize, with coordinator: 
UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    coordinator.animate(alongsideTransition: { [unowned self] _ in

        self.view.backgroundColor = UIColor.blue
        print("rotation in progress")

    }) { [unowned self] _ in
        self.view.backgroundColor = UIColor.green
        print("rotation complete")


    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.