RootViewController动画过渡,初始方向错误

时间:2011-11-08 16:32:46

标签: iphone ios ipad uiinterfaceorientation

所以我按照这个帖子: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. 对于每个viewcontroller,在shouldAutoRotateToOrientation方法中,我只为landscape设置
  3. 可能是另一个原因?

2 个答案:

答案 0 :(得分:119)

我刚刚看了这个,因为我一直都遇到同样的问题。我随机尝试了以下内容,它完美无缺:

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

我知道在动画块中禁用/启用动画有点奇怪,但交叉消除了动画,旋转没有 - 视图控制器似乎已经旋转并准备好滚动。

答案 1 :(得分:9)

只需输入另一个动画选项UIViewAnimationOptionAllowAnimatedContent

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