父视图控制器不会在提供子视图控制器时旋转

问题描述:

我有一个支持所有四个方向的父视图控制器。它提供了一个子视图控制器,并且如果在呈现子视图控制器的同时旋转设备,然后关闭子视图,则父视图控制器将无法正确旋转。下面是我在父视图控制器使用旋转代码:父视图控制器不会在提供子视图控制器时旋转

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 

if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) { 

    newestIssueCoverImageButton.frame = CGRectMake(40, 20, 688, 865); 
    shadow.frame = CGRectMake(40, 20, 688, 865); 
    recordView.frame = CGRectMake(0, 44, 768, 916); 
    classifiedsWebView.frame = CGRectMake(0, 44, 768, 916); 

} else { 

    newestIssueCoverImageButton.frame = CGRectMake(269, 20, 486, 613); 
    shadow.frame = CGRectMake(269, 20, 486, 613); 
    recordView.frame = CGRectMake(0, 44, 1024, 660); 
    classifiedsWebView.frame = CGRectMake(0, 44, 1024, 660); 

} 

父看,虽然没有使用这个代码,我只是旋转的装置。我如何调用此代码并确保当用户正在查看孩子时父视图控制器已正确旋转?谢谢你的帮助。

从苹果的文档:

如果在一个方向发生变化视图控制器是不可见的,然后旋转方法不会被调用。但是,视图变为可见时,将调用viewWillLayoutSubviews方法。此方法的实现可以调用statusBarOrientation方法来确定设备方向。

我添加了一个布尔跟踪时,没有顶的viewController,则:

- (void)viewWillLayoutSubviews { 

    if (notTopController) { 

     [self willRotateToInterfaceOrientation:[[UIApplication sharedApplication] statusBarOrientation] duration:0]; 
     [self willAnimateRotationToInterfaceOrientation:[[UIApplication sharedApplication] statusBarOrientation] duration:0]; 

     notTopController = NO; 

} 

对我的作品好为止。

请确定,均为父级和子级视图控制器支持旋转。 shouldAutorotateToInterfaceOrientation:

shouldAutorotateToInterfaceOrientationwillRotateToInterfaceOrientationRotateToInterfaceOrientation只有得到所谓的电流/可见视图控制器上,而不是在堆栈上的意见“后面”它。就你的情况而言,当孩子可见时,它将在孩子身上被呼叫,但不在父母身上。

如果出现了一个旋转的事件,当您关闭该子视图控制器(假设你使用一个NavigationController),shouldAutorotateToInterfaceOrientation将父被称为(但不will/didRotate)。如果你想自己看,在所有这些方法中抛出一些NSLog()语句。

知道所有这些,快速解决方法是将您的调整大小代码放入shouldAutorotateToInterfaceOrientation

+0

感谢您的帮助和解释。我会尝试。顺便说一句,我看着你的个人资料,你的Trakr应用程序真的很酷。 – 2012-02-27 02:56:50

+0

谢谢!目前正在等待审查... – Kevin 2012-02-27 16:14:58