2013-05-14 72 views
0

我有一个UISplitViewController ipad应用程序。它使用一个mainwindow.xib和我的子类RootView和DetailView控制器。它可以自动旋转至5.1。ipad应用程序不会在IOS6中旋转

我知道为ios6更改了界面。当我将新的旋转方法添加到我的细节和rootview类时,它仍然不旋转。

我调用了supportedInterfaceOrientations方法,但shouldAutorotate从不调用。

有谁知道如何解决这一问题?

(总是在学习,没有人能惹你周围的不好的另一个程序员感谢苹果。) 格里

+0

愚蠢的问题:你是否切换Xcode项目设置中的图标来启用旋转的方向? – 2013-05-14 00:23:10

回答

1

iOS 6 release notes

自转在iOS的6改变在iOS 6中,不建议使用UIViewControllershouldAutorotateToInterfaceOrientation:方法。取而代之,您应该使用supportedInterfaceOrientationsForWindow:shouldAutorotate方法。

更多的责任是转向应用程序和应用程序委托。现在,iOS容器(例如UINavigationController)不会咨询他们的孩子以确定他们是否应该自动旋转。默认情况下,应用程序和视图控制器支持的界面方向设置为iPad的成语为UIInterfaceOrientationMaskAll,iPhone成语则为UIInterfaceOrientationMaskAllButUpsideDown

视图控制器支持的界面方向可以随时间变化 - 即使应用程序支持的界面方向可能随时间而改变。无论何时设备旋转或每当视图控制器呈现全屏模式演示风格时,系统都会询问其支持的接口方向的最顶级全屏视图控制器(通常是根视图控制器)。此外,只有当此视图控制器从其方法返回YES时,才会检索支持的方向。系统将视图控制器支持的方向与应用支持的方向(由Info.plist文件或应用代理的application:supportedInterfaceOrientationsForWindow:方法确定)相交以确定是否旋转。

系统通过将应用程序的supportedInterfaceOrientationsForWindow:方法返回的值与最顶级全屏控制器的supportedInterfaceOrientations方法返回的值相交来确定是否支持方向。

setStatusBarOrientation:animated:方法不完全弃用。它现在只在最顶级全屏视图控制器的supportedInterfaceOrientations方法返回0时起作用。这使得调用者负责确保状态栏方向一致。

我知道这是一个拗口,但你可能还需要在项目的设置,查看支持的接口方向片:

enter image description here

+0

感谢您的帮助。真正的问题是:我的代码包含[window addSubview:spliteViewController.view];在didFinishLaunchingWithOptions方法中。将其更改为window.rootViewController = self.splitViewController;解决了这个问题。 – Gerry 2013-05-14 20:58:20

+0

啊,gotchya。所以,听起来像有一些视图控制器的具体东西,可能没有被调用。 – Aaron 2013-05-14 21:06:21

0

尝试建立一个通知时,方向改变。

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(orientationChanged:) 
              name:UIDeviceOrientationDidChangeNotification 
              object:nil]; 

然后实现orientationChanged函数内的旋转。

- (void)orientationChanged:(NSNotification *)notification {}