web-dev-qa-db-ja.com

RootViewControllerアニメーション遷移、初期方向が間違っています

だから私はこのスレッドをフォローしました: RootViewController Switch Transition Animation window.rootViewControllerをAからBにCに移行します。コードは次のようになります:

[UIView transitionWithView:self.window 
                  duration:0.5 
                   options: UIViewAnimationOptionTransitionFlipFromLeft 
                animations:^{
                               self.window.rootViewController = newViewController;
                } 
                completion:nil];

問題は、私のアプリが横向きのみをサポートすることですが、rootViewControllerの移行中、新しいビューコントローラは縦向きモードで表示され、すぐに横向きモードに回転します。

きっと:

  1. UISupportedOrientationを横向きに設定しました(ホームボタンが右)
  2. ビューコントローラごとに、shouldAutoRotateToOrientationメソッドで、横のみに設定しました

他の理由は何でしょうか?

48
Chris Chen

同じ問題が何度も発生したので、今すぐ調べました。私はランダムに次のことを試しましたが、完全に機能しました。

[UIView
    transitionWithView:window 
    duration:0.5
    options:UIViewAnimationOptionTransitionCrossDissolve
    animations:^(void) {
        BOOL oldState = [UIView areAnimationsEnabled];
        [UIView setAnimationsEnabled:NO];
        [(ICApp *)sharedApplication.delegate window].rootViewController = self;
        [UIView setAnimationsEnabled:oldState];
    } 
    completion:nil];

アニメーションブロック内のアニメーションを無効化/有効化するのは少し奇妙ですが、クロスディゾルブはアニメーション化し、回転はしません-ビューコントローラーは既に回転しており、回転する準備ができています。

119
Kalle

別のアニメーションオプションUIViewAnimationOptionAllowAnimatedContentを入力するだけです。

[UIView transitionWithView:self.window duration:0.5 options:(UIViewAnimationOptionTransitionFlipFromLeft | UIViewAnimationOptionAllowAnimatedContent) animations:^{
    self.window.rootViewController = newViewController;
} completion:nil];
9
Borut Tomazin