MPMovieViewController 不自动旋转
Posted
技术标签:
【中文标题】MPMovieViewController 不自动旋转【英文标题】:MPMovieViewController doesn't autorotate 【发布时间】:2012-10-08 03:44:40 【问题描述】:我有一个通过 MPMoviePlayerViewController 播放视频的应用程序,该应用程序在 UITableViewController 上执行选择操作后呈现,该 UITableViewController 嵌入在 UINavigationController 中,而 UINavigationController 嵌入在 UITabBarController 中。
TabBar 控制器 > 导航控制器 > 表格视图控制器 * MPMoviePlayerViewController
在 ios5 中一切正常,但升级到 iOS6 我发现视频在呈现后没有按预期旋转。如果我在目标摘要页面上选择了更多支持的界面方向,则会导致整个应用程序旋转。
Apple 文档在 UIViewController 类参考中说明了以下内容:
在 iOS 6 中,您的应用支持您在 应用程序的 Info.plist 文件。视图控制器可以覆盖 supportedInterfaceOrientations 方法来限制支持的列表 方向。一般系统只在root上调用该方法 窗口的视图控制器或要填充的视图控制器 整个屏幕;子视图控制器使用 父视图控制器为他们提供的窗口,不再 直接参与有关轮换的决策 支持的。应用程序的方向掩码和视图的交集 控制器的方向掩码用于确定哪些方向 可以旋转视图控制器。
但我不确定子视图控制器何时真正参与轮换决策。播放电影时,我是否需要更改标签栏控制器对shouldAutorotate
和supportedInterfaceOrientations
的响应方式?
【问题讨论】:
【参考方案1】:基本答案是所有视图控制器的旋转行为由“最顶层”视图控制器决定,但 MPMoviePlayerViewController 决定自己的旋转行为,因为它充当“呈现为填充整个屏幕的视图控制器”。
例如:如果我有一个单视图应用程序,自动旋转方法将在单视图的视图控制器上处理。如果我将该视图嵌入标签栏中,那么标签栏控制器实现将处理这些消息。如果我将视图嵌入标签栏内的导航栏中,标签栏实现仍然是处理消息的实现(如果其他视图控制器嵌入其中,它仍然是“根视图控制器”)。
MPMoviePlayerViewController 将对 shouldAutorotate 响应 YES 并支持横向。仍然可以防止影片旋转(通过在目标摘要页面上不选择纵向),但您为视图控制器层次结构选择的设置不会影响其这样做的能力。当 MPMoviePlayerViewController 出现时,它是处理自动旋转消息的视图控制器。不呈现时,由 Tab Bar Controller 负责。
【讨论】:
那么您是否设法让 MPMoviePlayerViewController 旋转视频?我已经将 MPMoviePlayerViewController 子类化并将 shouldAutorotate 设置为 YES,但我仍然没有设法让它旋转。 您不需要继承 MPMoviePlayerViewController - 它已经将 shouldAutorotate 设置为 YES。如果您的 MPMoviePlayerViewController 在您展示它后不支持旋转,那是因为您的应用程序不支持横向方向。您可以在目标摘要页面上直接在 plist 中或通过在 AppDelegate 中实现 application:supportedInterfaceOrientationsForWindow: 来编辑它。 是的,事实证明这是我的错。我在应用程序委托中向 keyWindow 添加子视图的应用程序,而不是正确设置 keyWindow 的根视图控制器。事实证明,这才是我的观点没有旋转的真正罪魁祸首。还是谢谢!以上是关于MPMovieViewController 不自动旋转的主要内容,如果未能解决你的问题,请参考以下文章
如何在仅纵向应用程序中使用 MPMovieViewController 播放横向视频
MPMoviePlayerViewController 在 iOS 4.2 中立即关闭自身
初始化并播放 MPMoviePlayerController 返回黑屏