模态视图可防止其他视图旋转

时间:2012-04-13 13:31:09

标签: iphone objective-c ios

我的MainViewController中有这个方法:

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    NSLog(@"MAIN CONTAINER WILL ANIMATE");
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}

当我旋转时,NSLog显示出来,一切都很完美。但是,如果我从我的MainViewController呈现一个modalViewController,然后我旋转,NSLog不再出现,我的MainViewController永远不会知道设备被旋转,所以当modalView被解除时,界面不会调整旋转。

关于为什么模态视图可以阻止父级接收轮换更新的任何想法?这是典型的,还是我的设置一定有问题?

为了确保,我尝试通过[mainViewController.view addSubview:modalView.view]将modalViewController呈现为子视图,并且旋转更新正常生效。只有当我[mainViewController presentModalViewController:modalViewController];时,更新才会生效。

3 个答案:

答案 0 :(得分:4)

当视图控制器以模态方式呈现时,其他视图控制器根本不会收到任何消息。这就是模式在这种情况下的意思。

显而易见的解决方案是检查无模式视图控制器的viewWillAppear方法中的方向。

答案 1 :(得分:1)

您必须检查以下内容的执行情况:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Overriden to allow any orientation. 
    return YES;
 }

在两个视图中。

答案 2 :(得分:0)

您需要在viewWillAppear中将布局调整为当前界面方向。显然,因为视图不可见,所以在模态视图控制器启动时不会调用动画函数。