2

我正在寻找有关如何仅允许您的 iOS 应用程序使用某些方向的说明。我知道,UISupportedInterfaceOrientationsshouldAutorotateToInterfaceOrientation我对它们的用途以及它们如何组合在一起有点困惑。

我试图使用UISupportedInterfaceOrientations只允许横向方向,这似乎没有影响,直到我研究它并读到它会影响初始方向。经过测试,我的应用似乎只在横向打开,但如果屏幕是纵向的,它会快速旋转。

我知道你可以shouldAutorotateToInterfaceOrientation用来限制允许的方向,例如:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || 
           (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

但是,在进行一些在线阅读时,我阅读shouldAutorotateToInterfaceOrientation的内容从 iOS6 开始已被弃用。

基本上我的问题是:

  1. 跨多个 iOS 版本限制屏幕方向的正确方法是什么?
  2. 是唯一用于UISupportedInterfaceOrientations限制初始方向的吗?

编辑:

要扩展已接受的答案,shouldAutorotate可在 iOS6 中使用。如果您已经在其中实现了逻辑shouldAutorotateToInterfaceOrientation和/或想要支持早期版本的 iOS,作为快速修复,您可以执行以下操作:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || 
           (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

- (BOOL)shouldAutorotate {
    return [self shouldAutorotateToInterfaceOrientation:self.interfaceOrientation];
}
4

2 回答 2

3

您需要用于旋转而不是的shouldAutorotateToInterfaceOrientation方法只是shouldAutorotate

根据 ViewControllers 的 AppleDoc 处理旋转:

在 iOS 6 中,您的应用支持在应用的 Info.plist 文件中定义的界面方向。视图控制器可以覆盖supportedInterfaceOrientations 方法来限制支持的方向列表。一般情况下,系统只会在窗口的根视图控制器或呈现为填满整个屏幕的视图控制器上调用该方法;子视图控制器使用其父视图控制器为它们提供的窗口部分,并且不再直接参与有关支持哪些旋转的决策。应用程序的方向掩码和视图控制器的方向掩码的交集用于确定视图控制器可以旋转到哪些方向。

你可以覆盖一个视图控制器的 preferredInterfaceOrientationForPresentation,该视图控制器旨在以特定方向全屏显示。

该方法shouldAutorotateToInterfaceOrientation已弃用,某些处理设备旋转响应的方法也已弃用。

对于iOS多版本的支持方法,这里还有苹果说的:

为了兼容性,仍然实现 shouldAutorotateToInterfaceOrientation: 方法的视图控制器不会获得新的自动旋转行为。(换句话说,它们不会回退到使用应用程序、应用程序委托或 Info.plist 文件来确定支持的方向。)相反,shouldAutorotateToInterfaceOrientation: 方法用于合成将由 supportedInterfaceOrientations 方法返回的信息.

取自发行说明

于 2012-11-30T13:38:05.090 回答
0

回答你的第二个问题:

是的,Info.plist 中的“UISupportedInterfaceOrientations”条目仅用于您的应用程序的初始启动,确保它不会以它不支持的方向启动您的应用程序,因此不需要执行旋转权限离开。

此外,如果您的应用不想使用特定的方向(例如,对于只做横向的游戏),在您的 AppDelegate 中覆盖“application:supportedInterfaceOrientationsForWindow”非常有用。

最后,这是一个常见错误,在 iPhone 和 iPod Touch 设备上,设备永远不应该旋转到 UIInterfaceOrientationPortraitUpsideDown!这是因为这些设备(与 iPad 不同)不允许用户使用Lock软按钮将设备锁定为横向模式 - 该按钮仅锁定为纵向。因此,如果用户侧躺,想要在横向模式下使用应用程序,如果您的应用程序进入倒置方向,他就无法执行此操作。但是,如果您不允许这种轮换,那么它就可以工作。

于 2013-04-24T10:24:35.280 回答