UISupportedInterfaceOrientations

UISupportedInterfaceOrientations

我正在寻找有关如何仅允许iOS应用特定方向的说明。我知道UISupportedInterfaceOrientationsshouldAutorotateToInterfaceOrientation,但是对于它们的用途以及它们如何组合在一起我有些困惑。

我尝试使用UISupportedInterfaceOrientations仅允许横向显示,直到我对其进行研究并阅读到它会影响初始方向后,该方向才看起来没有影响。经过测试,我的应用程序确实只在横向打开,但是如果屏幕是纵向的,则会快速旋转。

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

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

但是,在进行在线阅读时,从iOS6开始不推荐使用shouldAutorotateToInterfaceOrientation

基本上我的问题是:
  • 什么是限制整个屏幕方向的正确方法
    多个版本的iOS?
  • UISupportedInterfaceOrientations唯一用于限制
    最初的方向?

  • 编辑:

    为了扩展接受的答案,shouldAutorotate在iOS6中工作。作为快速解决方案,如果您已经在shouldAutorotateToInterfaceOrientation中实现了您的逻辑和/或想要支持iOS的早期版本,则可以执行以下操作:
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
               (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
    }
    
    - (BOOL)shouldAutorotate {
        return [self shouldAutorotateToInterfaceOrientation:self.interfaceOrientation];
    }
    

    最佳答案

    您需要用于旋转而不是shouldAutorotateToInterfaceOrientation的方法只是shouldAutorotate根据AppleDoc for ViewControllers处理旋转:

    在iOS 6中,您的应用支持在应用的Info.plist文件中定义的界面方向。视图控制器可以重写supportedInterfaceOrientations方法以限制支持的方向列表。通常,系统仅在窗口的根视图控制器或显示为填充整个屏幕的视图控制器上调用此方法。子视图控制器使用其父视图控制器为其提供的窗口部分,而不再直接参与有关支持哪些旋转的决策。应用程序的方向蒙版和视图控制器的方向蒙版的交集用于确定视图控制器可以旋转到的方向。
    您可以覆盖视图控制器的preferredInterfaceOrientationForPresentation,该视图控制器旨在以特定方向全屏显示。

    不建议使用shouldAutorotateToInterfaceOrientation方法,以及一些用于处理对设备旋转响应的方法。
    对于多种版本的iOS的支持方法,这是苹果公司所说的:

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

    取自release notes

    10-07 19:38