1

我制作了我的 gles 应用程序,并在我的 iPad 上对其进行了测试。它应该只在横向模式下工作,所以我Info.plist喜欢这个

<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>

我只为 iPhone 设置了横向右,所以启动画面正确显示(似乎你不能在 iPhone 上为横向右和横向左设置单独的启动画面)

该应用程序运行良好,但在朋友的 iPhone 上,该应用程序以纵向模式运行,并且不会旋转到任一横向模式。旋转锁定已关闭。

我没有特别从我的代码中做任何事情来支持旋转,因为只是Info.plist在我的 iPad 上完美地设置我的工作。

iPhone模拟器自动变成横向,即使我旋转它也保留横向渲染。

这可能是什么原因造成的?我还尝试允许两个景观旋转,但没有骰子。

4

1 回答 1

3

ios6 引入了处理方向变化的新方法——我猜你朋友的 iphone 正在运行 ios5。请参阅UIViewController 文档以了解如何处理这两个版本:

处理视图旋转

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

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

在 iOS 5 和更早版本中,UIViewController 类仅以纵向模式显示视图。要支持其他方向,您必须重写 shouldAutorotateToInterfaceOrientation: 方法并为您的子类支持的任何方向返回 YES。如果您的视图的自动调整大小属性配置正确,那么您可能只需要这样做。但是,UIViewController 类为您提供了额外的钩子来根据需要实现额外的行为。通常,如果您的视图控制器打算用作子视图控制器,它应该支持所有界面方向。

当可见视图控制器发生旋转时,将在旋转期间调用 willRotateToInterfaceOrientation:duration:、willAnimateRotationToInterfaceOrientation:duration: 和 didRotateFromInterfaceOrientation: 方法。viewWillLayoutSubviews 方法也会在视图被其父级调整大小和定位后调用。如果在方向更改发生时视图控制器不可见,则永远不会调用旋转方法。但是,viewWillLayoutSubviews 方法在视图变得可见时被调用。您对此方法的实现可以调用 statusBarOrientation 方法来确定设备方向。

于 2013-02-08T19:09:51.663 回答