2

所以我们构建了一个只支持横向的 iPad App。这是通过在 plist 中设置Supported interface orientations (iPad)to 来强制执行的。Landscape (left/right home button)所有的UIViewControllers都实现shouldAutorotateToInterfaceOrientation:如下:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

这工作正常,应用程序被锁定为横向。现在我们有一个MPMoviePlayerController嵌入我们的视图。当用户全屏观看这部电影时,他可以旋转到纵向。电影播放器​​似乎绕过了我们所有的横向设置。这对我来说很好,但是当用户done仍然在纵向时点击 - 按钮时,我们所有的UIViewControllers人也都是纵向的并且看起来很糟糕!

用户必须将 iPad 旋转到横向以使事物再次看起来不错,然后将无法按预期旋转回纵向。

那么为什么即使所有人都shouldAutorotateToInterfaceOrientation告诉iOS不要旋转到纵向,我的视图也会旋转到纵向呢?以及如何确保电影播放器​​不会旋转我的视图?

如果您的解决方案还将电影播放器​​本身锁定为横向,那对我来说很好。只要我的观点不旋转,我就很高兴!:)

4

1 回答 1

5

那么,即使所有 shouldAutorotateToInterfaceOrientation 都告诉 iOS 不要旋转到纵向,为什么我的视图会旋转到纵向?以及如何确保电影播放器​​不会旋转我的视图?

如果您的解决方案还将电影播放器​​本身锁定为横向,那对我来说很好。只要我的观点不旋转,我就没事!:)

使用此视图层次结构时,我遇到了这个确切的问题:

       +------------------------+  +-------------------+
       |                        |  |                   |
       | UINavigationController +->| Some Intermediate |
       |                        |  | View Controllers  |
       +------------------------+  |                   |
                                   +---------------+---+
                                                   |
                                                   v
                                          +--------------------------+
                                          |  MPMoviePlayerController |
                                          |       (embed)            |
                                          +--------------------------+

所有中间视图控制器都被锁定为横向,因此应用程序永远不会处于纵向,除非 MPMoviePlayerController 处于全屏状态(导致与 OP 完全相同的问题)。

解决方案是通过创建一个覆盖 UINavigationController 的子类来将UINavigationController锁定为横向shouldAutorotateToInterfaceOrientation。这样 MPMoviePlayerController 不再旋转到纵向。我怀疑进入全屏时它会将自己添加到主窗口的 rootViewController,在我的例子中是 UINavigationController(或者更确切地说是我的子类)。

希望这可以帮助!

于 2012-07-20T15:33:53.073 回答