我的应用程序根视图控制器开始。它的工作是显示一个启动画面,直到应用程序准备就绪。启动画面位于单独的视图控制器(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方法的值是横向。我不确定是否有一个好的方法可以解释这一点。似乎旋转发生在笔尖加载时。
在此先感谢。