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

Chr*_*hen 48 iphone ipad uiinterfaceorientation ios

所以我按照这个线程: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];
Run Code Online (Sandbox Code Playgroud)

问题是我的应用程序只支持横向,但在rootViewController过渡期间,新的视图控制器以纵向模式显示,而不是快速旋转到横向模式.

我确定:

  1. 我已将UISupportedOrientation设置为横向(主页按钮右侧)
  2. 对于每个viewcontroller,在shouldAutoRotateToOrientation方法中,我只为landscape设置

可能是另一个原因?

Kal*_*lle 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];
Run Code Online (Sandbox Code Playgroud)

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


Bor*_*zin 9

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

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