【问题标题】:MPMovieViewController doesn't autorotateMPMovieViewController 不自动旋转
【发布时间】:2012-10-08 03:44:40
【问题描述】:

我有一个通过 MPMoviePlayerViewController 播放视频的应用程序,该应用程序在 UITableViewController 上执行选择操作后呈现,该 UITableViewController 嵌入在 UINavigationController 中,而 UINavigationController 嵌入在 UITabBarController 中。

TabBar 控制器 > 导航控制器 > 表格视图控制器 * MPMoviePlayerViewController

在 iOS5 中一切正常,但升级到 iOS6 我发现视频在呈现后没有按预期旋转。如果我在目标摘要页面上选择了更多支持的界面方向,则会导致整个应用程序旋转。

Apple 文档在 UIViewController 类参考中说明了以下内容:

在 iOS 6 中,您的应用支持您在 应用程序的 Info.plist 文件。视图控制器可以覆盖 supportedInterfaceOrientations 方法来限制支持的列表 方向。一般系统只在root上调用该方法 窗口的视图控制器或要填充的视图控制器 整个屏幕;子视图控制器使用 父视图控制器为他们提供的窗口,不再 直接参与有关轮换的决策 支持的。应用程序的方向掩码和视图的交集 控制器的方向掩码用于确定哪些方向 可以旋转视图控制器。

但我不确定子视图控制器何时真正参与轮换决策。播放电影时,我是否需要更改标签栏控制器对shouldAutorotatesupportedInterfaceOrientations 的响应方式?

【问题讨论】:

    标签: iphone ios6


    【解决方案1】:

    基本答案是所有视图控制器的旋转行为由“最顶层”视图控制器决定,但 MPMoviePlayerViewController 决定自己的旋转行为,因为它充当“呈现为填充整个屏幕的视图控制器”。

    例如:如果我有一个单视图应用程序,自动旋转方法将在单视图的视图控制器上处理。如果我将该视图嵌入标签栏中,那么标签栏控制器实现将处理这些消息。如果我将视图嵌入标签栏内的导航栏中,标签栏实现仍然是处理消息的实现(如果其他视图控制器嵌入其中,它仍然是“根视图控制器”)。

    MPMoviePlayerViewController 将对 shouldAutorotate 响应 YES 并支持横向。仍然可以防止影片旋转(通过在目标摘要页面上不选择纵向),但您为视图控制器层次结构选择的设置不会影响其这样做的能力。当 MPMoviePlayerViewController 出现时,它是处理自动旋转消息的视图控制器。不呈现时,由 Tab Bar Controller 负责。

    【讨论】:

    • 那么您是否设法让 MPMoviePlayerViewController 旋转视频?我已经将 MPMoviePlayerViewController 子类化并将 shouldAutorotate 设置为 YES,但我仍然没有设法让它旋转。
    • 您不需要继承 MPMoviePlayerViewController - 它已经将 shouldAutorotate 设置为 YES。如果您的 MPMoviePlayerViewController 在您展示它后不支持旋转,那是因为您的应用程序不支持横向方向。您可以在目标摘要页面上直接在 plist 中或通过在 AppDelegate 中实现 application:supportedInterfaceOrientationsForWindow: 来编辑它。
    • 是的,事实证明这是我的错。我在应用程序委托中向 keyWindow 添加子视图的应用程序,而不是正确设置 keyWindow 的根视图控制器。事实证明,这才是我的观点没有旋转的真正罪魁祸首。还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多