我有一个应用程序通过MPMoviePlayerViewController播放视频,该控件是在UITableViewController上执行选择操作后显示的,UITableViewController嵌入在嵌入UITabBarController的UINavigationController中。
TabBar控制器>导航控制器>表视图控制器* MPMoviePlayerViewController
在iOS5中,一切都按预期工作,但升级到iOS6我发现视频在呈现后没有按预期旋转。如果我在目标摘要页面上选择了更多支持的界面方向,则会导致整个应用程序旋转。
Apple文档在UIViewController类引用中说明了以下内容:
在iOS 6中,您的应用支持在您的应用中定义的界面方向 app的Info.plist文件。视图控制器可以覆盖 supportedInterfaceOrientations方法限制支持的列表 取向。通常,系统仅在根上调用此方法 视图控制器的窗口或视图控制器呈现填充 整个屏幕;子视图控制器使用的部分 由父视图控制器为它们提供的窗口不再 直接参与有关轮换的决定 支持的。应用程序的方向掩码和视图的交集 控制器的方向掩码用于确定哪些方向 视图控制器可以旋转到。
但我不确定子视图控制器何时实际参与轮换决策。我需要更改我的标签栏控制器在播放电影时对shouldAutorotate
和supportedInterfaceOrientations
的响应方式吗?
答案 0 :(得分:1)
基本答案是所有视图控制器的旋转行为由“最顶层”视图控制器确定,但MPMoviePlayerViewController确定其自身的旋转行为,因为它充当“用于填充整个屏幕的视图控制器”。
例如:如果我有一个单视图应用程序,则会在视图控制器上处理单个视图的自动旋转方法。如果我将该视图嵌入标签栏,则标签栏控制器实现将处理这些消息。如果我将视图嵌入到标签栏内的导航栏中,标签栏实现仍然是处理消息的那个(如果其他视图控制器嵌入其中,它仍然是“根视图控制器”)。
MPMoviePlayerViewController将对shouldAutorotate作出YES响应并支持横向方向。仍然可以阻止电影旋转(通过不在目标摘要页面上选择纵向方向),但是为视图控制器层次结构选择的设置不会影响其执行此操作的能力。当呈现MPMoviePlayerViewController时,它是处理自动旋转消息的视图控制器。未显示时,标签栏控制器负责。