RootViewController animation transition, initial orientation is wrong

So I followed this thread: RootViewController Switch Transition Animation to transit the window.rootViewController from A to B to C. Code looks like this:

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

The problem is my app shall only support landscape, but during the rootViewController transition, the new view controller appears in portrait mode than quickly rotate to landscape mode.

I'm sure that:

  • I've set UISupportedOrientation to landscape (home button right)
  • for each viewcontroller, in the shouldAutoRotateToOrientation method, I set only for landscape
  • What could be the other reason?


    I looked into this just now because I kept getting the same issue. I randomly tried the following, and it worked perfectly:

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

    I know it's a bit odd to disable/enable animations inside an animation block, but the cross dissolve animates, and the rotation does not -- the view controller appears already rotated and ready to roll.


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

    [UIView transitionWithView:self.window duration:0.5 options:(UIViewAnimationOptionTransitionFlipFromLeft | UIViewAnimationOptionAllowAnimatedContent) animations:^{
        self.window.rootViewController = newViewController;
    } completion:nil];
    
    链接地址: http://www.djcxy.com/p/68288.html

    上一篇: 如何设置子视图控制器的topLayoutGuide位置

    下一篇: RootViewController动画过渡,初始方向错误