UIViewController方向

时间:2011-08-19 18:15:32

标签: iphone ios4

我有一个UIViewController实例(viewController1),我想以横向模式锁定,我能够做到。在点击按钮时,我推送另一个支持两种方向的UIViewController(viewController2)。现在,如果用户将viewController2的方向更改为纵向并返回viewController1,则viewController1也会将其方向更改为纵向。我怎么能避免这种情况?

提前致谢。

3 个答案:

答案 0 :(得分:0)

将这些方法添加到视图控制器

  • (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    return(interfaceOrientation == UIInterfaceOrientationPortrait); }

第一个

  • (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    返回YES); }

那是第二个

- (BOOL)shouldAutorotateToInterfaceOrientation:UIInterfaceOrientation)toInterfaceOrientation {     if(UIInterfaceOrientationIsPortrait(toInterfaceOrientation)){         返回YES;     }     返回NO; }

答案 1 :(得分:0)

如果那两个控制器都是UIViewController的实现,那么两个不同的类都是相互的!你可以在第一个实现方法shouldAutorotateToInterfaceOrientation!即使你回去,这也应该有效!

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
    return YES;
}
return NO;}

答案 2 :(得分:0)

你说推,所以我假设两个ViewControllers都在NavigationController中。如果是这样,我将不得不让你失望,你想要的是不可能的。您的旋转回调正常工作,它们响应旋转,您无法强制它。正在发生的是正确的行为。

最佳解决方案是防止用户在前一个ViewController不支持的方向上返回,例如隐藏后退按钮。

前段时间我已经创建了自己的NavigationController(不是从UIViewController继承但它可以完全相同)并且我已经尝试实现你想要做的事情。在推送或弹出之前,如果即将显示的ViewController视图不支持当前方向,我将该ViewController的视图转换了90°并强制状态栏的方向为新的ViewController支持的方向。 一旦推或弹出完成,我就会做一个小技巧来强制旋转设备。如果从窗口中删除rootViewController的视图并重新添加它,则响应者链将被强制执行所有旋转回调。当发生这种情况时,我检查了ViewController的视图是否被转换并重置了该转换。

它确实起作用了。但这是一个混乱的代码,它违背了Apple当前的政策,即rootViewController应负责处理方向。同样在iOS6中,强制状态栏方向可以保证正常工作。所以我真的建议不要这样做,我已经从我自己的NavigationController中删除了它。