MPMoviePlayerController 在全屏模式后使 App 的方向不正确
Posted
技术标签:
【中文标题】MPMoviePlayerController 在全屏模式后使 App 的方向不正确【英文标题】:MPMoviePlayerController leaves App in incorrect orientation after fullscreen mode 【发布时间】:2012-04-10 15:06:10 【问题描述】:所以我们构建了一个只支持横向的 iPad 应用。这是通过在 plist 中将 Supported interface orientations (iPad)
设置为 Landscape (left/right home button)
来强制执行的。此外,所有UIViewControllers
都实现了shouldAutorotateToInterfaceOrientation:
,如下所示:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
这工作正常,应用程序被锁定为横向。现在我们在其中一个视图中嵌入了MPMoviePlayerController
。当用户全屏观看这部电影时,他可以旋转到纵向。电影播放器似乎绕过了我们所有的横向设置。这对我来说很好,但是当用户在仍然处于纵向时点击done
按钮时,我们所有的UIViewControllers
也都是纵向的并且看起来很糟糕!
用户必须将 iPad 旋转到横向以使画面再次看起来不错,然后将无法按预期旋转回纵向。
那么为什么即使所有shouldAutorotateToInterfaceOrientation
都告诉ios 不要旋转到纵向,我的视图也会旋转到纵向?以及如何确保电影播放器不会旋转我的视图?
如果您的解决方案还将电影播放器本身锁定为横向,那我没问题。只要我的观点不旋转,我就很高兴! :)
【问题讨论】:
您是否尝试过将 MPMoviePlayerController 子类化,然后覆盖 shouldAutorotateToInterfaceOrientation: 以使其与您的其他视图控制器匹配?shouldAutorotateToInterfaceOrientation:
不会在 MPMoviePlayerController
类上调用。 MPMoviePlayerViewController
有一个,但覆盖那个并没有帮助。似乎无法强制电影播放器为横向。
我的意思是 MPMovePlayerViewController。我的手指没有收到消息。 MPMoviePlayerViewController 继承自 UIViewController,并且 UIViewController 确实有一个 shouldAutorotateToInterfaceOrientation: 方法,您应该可以在 MPMoviePlayerViewController 的子类中重写该方法。我没有时间尝试,但我认为值得一试。
试过了,但没有结果。 shouldAutorotateToInterfaceOrientation: 方法在旋转之前甚至不会被调用。如果您能给我提供一个工作示例,那就太好了!
当视图控制器旋转方法没有被调用时,通常意味着视图控制器控制当前视图层次结构中的一个子视图,而不是整个视图层次结构。我注意到你说,“[W]e 在我们的一个视图中嵌入了一个 MPMoviePlayerController。”这可能是问题的根源。如果我是你,我会实例化一个 MPMoviePlayerViewController,然后从其他视图控制器中以模态方式呈现它。我希望我有时间制作一个工作示例,因为这是一个有趣的问题。
【参考方案1】:
那么,即使所有 shouldAutorotateToInterfaceOrientation 都告诉 iOS 不要旋转到纵向,为什么我的视图会旋转到纵向?以及如何确保电影播放器不会旋转我的视图?
如果您的解决方案还将电影播放器本身锁定为横向,那我没问题。只要我的观点不旋转,我就没事! :)
我在使用这个视图层次结构时遇到了这个确切的问题:
+------------------------+ +-------------------+
| | | |
| UINavigationController +->| Some Intermediate |
| | | View Controllers |
+------------------------+ | |
+---------------+---+
|
v
+--------------------------+
| MPMoviePlayerController |
| (embed) |
+--------------------------+
所有中间视图控制器都被锁定为横向,因此应用永远不会处于纵向,除非 MPMoviePlayerController 处于全屏状态(导致与 OP 完全相同的问题)。
解决方案是通过创建一个覆盖shouldAutorotateToInterfaceOrientation
的子类来将UINavigationController 锁定为横向。这样 MPMoviePlayerController 不再旋转到纵向。我怀疑进入全屏时它会将自己添加到主窗口的 rootViewController,在我的例子中是 UINavigationController(或者更确切地说是我的子类)。
希望这会有所帮助!
【讨论】:
感谢 Taum。它真的对我有帮助。伟大的解决方案兄弟。 :)以上是关于MPMoviePlayerController 在全屏模式后使 App 的方向不正确的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MPMoviePlayerController 上处理多个 SRT 文件
在 MPMoviePlayerController 上执行捏合手势时屏幕黑屏
在 UITableViewCell 中嵌入 MPMoviePlayerController
MPMoviePlayerController 在影片结尾更改控件样式