RootViewControlleranimation过渡,初始定向是错误的

所以我跟着这个线程: RootViewController切换过渡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. 对于每个viewcontroller,在shouldAutoRotateToOrientation方法中,我只为横向设置

还有什么原因呢?

我刚才看了一下,因为我一直在问这个问题。 我随机尝试以下,它完美的工作:

 [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]; 

我知道在animation块中禁用/启用animation有点奇怪,但是交叉消除了animation,而旋转则没有 – 视图控制器显示已经旋转并准备好滚动。

只需放入另一个animation选项UIViewAnimationOptionAllowAnimatedContent

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