0

我有一个 UISplitViewController ipad 应用程序。它使用 mainwindow.xib 和我的子类 RootView 和 DetailView 控制器。它在 5.1 之前的所有 ioses 中都能正确自动旋转。

我知道 ios6 的界面已更改。当我将新的旋转方法添加到我的细节和根视图类时,它仍然不会旋转。

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

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

(总是知道没有人能像其他程序员一样把你弄得一团糟。感谢 Apple。) Gerry

4

2 回答 2

1

iOS 6 发行说明

iOS 6 中的自动旋转正在发生变化。在 iOS 6 中,不推荐使用的shouldAutorotateToInterfaceOrientation:方法。UIViewController取而代之的是,您应该使用supportedInterfaceOrientationsForWindow:andshouldAutorotate方法。

更多的责任正在转移到应用程序和应用程序委托身上。现在,iOS 容器(例如UINavigationController)不会咨询它们的子容器来确定它们是否应该自动旋转。默认情况下,应用程序和视图控制器支持的界面方向设置UIInterfaceOrientationMaskAll为 iPad 惯用语和UIInterfaceOrientationMaskAllButUpsideDowniPhone 惯用语。

视图控制器支持的界面方向会随着时间而改变——甚至应用程序支持的界面方向也会随着时间而改变。每当设备旋转或视图控制器以全屏模式呈现样式呈现时,系统都会向最顶层的全屏视图控制器(通常是根视图控制器)询问其支持的界面方向。此外,仅当此视图控制器从其shouldAutorotate方法返回 YES 时才会检索支持的方向。系统将视图控制器支持的方向与应用支持的方向(由 Info.plist 文件或应用代理的application:supportedInterfaceOrientationsForWindow:方法确定)相交以确定是否旋转。

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

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

我知道这很拗口,但您可能还想在项目设置中检查支持的界面方向表:

在此处输入图像描述

于 2013-05-14T00:10:57.350 回答
0

尝试在方向更改时设置通知。

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

然后在orientationChanged函数中实现旋转。

- (void)orientationChanged:(NSNotification *)notification {}
于 2013-05-14T00:15:54.447 回答