添加:您可以在github ios6rotations上访问此项目
抱歉,有人问有关iOS 6屏幕旋转的问题,但这确实让我很痛苦。而且我仍然无法完全理解它-由于某些原因,它在某些情况下的行为有所不同。
我的测试应用程序中具有以下简单的视图层次结构:
我要实现的目标是- 将蓝色控制器仅横向放置,将红色控制器仅纵向放置。
我有一个UINavigationController的子类,里面有这样的代码:
@implementation CustomNavController- (BOOL)shouldAutorotate{ return [[self.viewControllers lastObject] shouldAutorotate];}- (NSUInteger)supportedInterfaceOrientations{ return [[self.viewControllers lastObject] supportedInterfaceOrientations];}- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];}@end
在我的蓝色控制器中,我实现了这一点:
- (BOOL)shouldAutorotate { return YES;}- (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape;}
在红色控制器中:
- (BOOL)shouldAutorotate { return YES;}- (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait;}
现在,我有以下行为:
应用在横向模式下启动(确定)
当我按下按钮时,我的红色控制器也按横向显示(这不行,因为必须在“人像”中显示)
它成功旋转为纵向但不向后旋转为横向
如果我将红色控制器留在人像模式下,则我的蓝色控制器(仅限横向)会以人像模式显示。
PS我所有的旋转方法(上面发布的)都被正常调用(顺便说一下,为什么这些方法在每次屏幕转换时都会被调用多次-5-6次)
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
不被推叫
所有(除portraitUpsideDown外)方向都包含在plist中。
问题是-如何在每个控制器中强制旋转到支持的方向?
我建议您在此处发布(作为答案)任何100%正常工作的代码来处理ios6中的旋转(例如,如果您的iPad使用SplitController的话)-我会将这个问题保留在收藏夹中,以在需要时将它们全部放在一个位置处理一些特定情况。干杯!
添加:请不要将此作为从风景到肖像的答案发布,我希望有一种更优雅的方法。
慕村225694
MYYA
相关分类