3

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

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

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

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

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

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

4

1 回答 1

1

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

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

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

于 2012-10-08T03:44:40.550 回答