12

据我所知,iOS 6 上的正确做法是编写这样的代码来处理自动旋转:

// iOS 6
- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

而不是写

// pre-iOS 6 support
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    BOOL retVal = UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
    return retVal;
}

老实说,我认为 iOS 6 之前的版本要清楚得多:我不明白有两种方法来处理自动旋转的意义,特别是因为我在所有示例中都看到了-(BOOL) shouldAutorotate返回。YES我错过了什么吗?

4

1 回答 1

8

新的 API 让您可以保存调用以获取当前设备方向:两个问题,即

  • 无论新方向如何,应用程序是否应自动旋转,以及
  • 设备支持的方向是什么

最常见的是静态应答,无需调用检查当前方向。当屏幕具有由单独的视图控制器控制的多个视图时,节省变得更加重要。

由于 iOS 正在调用您的应用程序shouldAutorotate以响应来自加速度计的事件,因此它已经知道新的方向;如果您的应用回答“是”,则 iOS 可以根据支持的列表检查当前方向,并在您的应用不查询当前方向的情况下做出决定。

在极少数情况下,您的应用需要根据新方向决定自动旋转,新 API 并不比旧 API 差,因此这是一种“双赢”的情况。

于 2012-10-09T17:54:45.387 回答