UIViewController遏制 - 新孩子不知道轮换

时间:2012-02-01 15:46:16

标签: iphone ios ipad uiviewcontroller uikit

我的应用程序以根视图控制器开始。它的工作是在应用程序准备好之前显示启动画面。启动画面位于单独的视图控制器(splashVC)中。当应用程序准备就绪时,appDelegate会在根视图控制器中调用present方法。从这里,根视图控制器将另一个视图控制器(mainVC)添加为子项,然后使用

转换到新控制器
    [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];
                                   }];

我的问题是,如果我以横向模式启动应用程序,那么我会看到Default.png加载,然后是我自动旋转到横向的启动画面。这一切都有道理。但是,当mainVC出现在屏幕上时,其视图似乎卡在纵向方向 - 视图不会一直延伸到屏幕的右边界。根视图控制器自动恢复正常 - 我添加了背景颜色,因此我可以看到mainVC没有完全覆盖它。我认为这可能是因为轮换发生时mainVC不是孩子。然后我在根视图控制器的loadView方法中添加了mainVC,其中添加了splashVC。我只想弄清楚为什么在显示mainVC时,它不会自动调整大小。如果我添加方法 -

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

当ViewControllers接收到视图已更改的消息时,它们仅在呈现方向时获取方向更新是视图层次结构的一部分。 (在这种情况下已经发出了该消息)例外情况是你使用了apple方法进行导航。这些是在推送/呈现时正确设置视图。

尝试使用基本导航并使用push和pop在屏幕之间切换。或者,如果你真的想摆脱那个视图控制器你可以调用你仍然可以用不同的方式为它们设置动画。

  

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

并传入一个包含新视图控制器的数组。如果将动画设置为NO,则可以使用相同的动画块来执行自定义动画块。

答案 1 :(得分:0)

要解决此问题,请在设置视图控制器时将第二个视图控制器添加为子视图,而不是等到我呈现视图控制器之前。