2012-02-01 60 views
0

我的应用程序根视图控制器开始。它的工作是显示一个启动画面,直到应用程序准备就绪。启动画面位于单独的视图控制器(splashVC)中。当应用程序准备就绪时,appDelegate会在根视图控制器中调用当前方法。从这里,根视图控制器增加了一个视图控制器(mainVC)作为一个孩子,然后转换到新的控制器的UIViewController遏制 - 新来的孩子不知道旋转

[splashVC willMoveToParentViewController:nil]; 
    [self transitionFromViewController:splashVC 
        toViewController:mainVC 
          duration:0.5 
          options:UIViewAnimationOptionTransitionCrossDissolve 
         animations:^{ 
            [self.view addSubview:mainVC.view]; 
            [splashVC.view removeFromSuperview]; 
            } 
         completion:^(BOOL finished) { 
             [splashVC removeFromParentViewController]; 
            }]; 

我的问题是,如果我开始在横向模式下的应用程序,然后我看到默认.png加载后跟我的闪屏自动旋转到横向。这一切都有道理。但随后,当mainVC接触屏幕,它的观点似乎被卡在纵向方向 - 视图不会一路延伸到屏幕的右边框。根视图控制器可以很好地进行自动调整 - 我为其添加了背景颜色,这样我就可以看到mainVC没有完全覆盖它。我认为这可能是因为轮换发生时mainVC不是孩子。因此,我在添加splashVC的根视图控制器的loadView方法中添加了mainVC。我只是想弄清楚为什么当mainVC显示时,它不是自动调整大小。如果我添加的方法 -

willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

然后我可以看到,之前mainVC被加载,因为这是从来没有在mainVC称为发生旋转。我不想在改变视图的大小方面进行破解。如何处理这个问题的任何帮助都会很棒。也许我在我的遏制中遗漏了一些东西,但我使用addChildViewController和didMoveToParentViewController方法将我的视图控制器作为子视图添加到根视图控制器。

编辑 - 我已经注意到,在mainVC的initWithNibNamed ...方法中,self.interfaceOrientation的值是纵向,但其viewDidLoad方法的值是横向。我不确定是否有一个好的方法可以解释这一点。似乎旋转发生在笔尖加载时。

在此先感谢。

回答

0

为了解决这个问题添加的第二视图控制器作为子在设置视图控制器,而不是等待直到权利之前,我呈现视图控制器。

1

ViewControllers只得到更新的方向时,他们都在一个视图层次的一部分,当它接收到的观点已经改变了该消息。 (在这种情况下,该消息已发送出去)例外情况是,如果您使用苹果方法进行导航。那些在推送/呈现时正确设置了视图。

尝试具有基部导航和使用压入和弹出到屏幕之间切换。或者,如果你真的想摆脱那个你可以调用的视图控制器,你仍然可以以不同的方式对它们进行动画处理。

navigationController setViewControllers:(NSArray的*)动画:(BOOL)

,并通过与内新视图控制器的阵列。如果将动画设置为“否”,则可以使用相同的动画块进行自定义动画。

相关问题