MPMovieViewController无法自动旋转。

3
我有一个应用程序,通过在UITableViewController上执行选择操作后呈现MPMoviePlayerViewController播放视频,该UITableViewController嵌入在UINavigationController中,而UINavigationController嵌入在UITabBarController中。在iOS5中,一切都按预期工作,但升级到iOS6后,我发现视频在展示后没有像预期的那样旋转。如果我在目标概要页上选择更多支持的界面方向,则会导致整个应用程序旋转。苹果文档在UIViewController类引用中如下所述:
“在iOS 6中,您的应用程序支持Info.plist文件中定义的接口方向。视图控制器可以覆盖supportedInterfaceOrientations方法以限制支持的方向列表。通常,系统仅在窗口的根视图控制器或呈现以填充整个屏幕的视图控制器上调用此方法;子视图控制器使用其父视图控制器提供给它们的窗口部分,并且不再直接参与有关支持哪些旋转的决策。应用程序方向掩码与视图控制器方向掩码的交集用于确定可以将视图控制器旋转到哪些方向。”
但我不确定子视图控制器何时实际上参与旋转决策。当电影正在播放时,我需要更改我的Tab Bar Controller对shouldAutorotate和supportedInterfaceOrientations的响应方式吗?
1个回答

1
基本答案是所有视图控制器的旋转行为都由“最顶层”的视图控制器确定,但MPMoviePlayerViewController确定自己的旋转行为,因为它充当“呈现填充整个屏幕的视图控制器”。
例如:如果我有一个单视图应用程序,则自动旋转方法将在单个视图的视图控制器上处理。如果我将该视图嵌入选项卡栏中,则选项卡栏控制器实现将处理这些消息。如果我将视图嵌入选项卡栏内的导航栏中,则选项卡实现仍将处理消息(如果其他视图控制器嵌入其中,则仍为“根视图控制器”)。
MPMoviePlayerViewController将响应shouldAutorotate并支持横向方向。仍然可以通过不在目标摘要页面上选择纵向方向来防止电影旋转,但您选择的视图控制器层次结构的设置不会影响其能力。当呈现MPMoviePlayerViewController时,它是处理自动旋转消息的视图控制器。当它未被呈现时,选项卡栏控制器负责。

你成功让MPMoviePlayerViewController旋转视频了吗?我已经继承了MPMoviePlayerViewController并将shouldAutorotate设置为YES,但我仍然无法让它旋转。 - Sani
1
您不需要子类化MPMoviePlayerViewController - 它已经将shouldAutorotate设置为YES。如果您的MPMoviePlayerViewController在呈现后不支持旋转,则是因为您的应用程序不支持横向方向。您可以在目标摘要页面上直接编辑plist,或通过在AppDelegate中实现application:supportedInterfaceOrientationsForWindow:来进行编辑。 - Elias Peterson
是我自己的问题。在应用程序代理中,我向keyWindow添加了子视图,而没有正确设置keyWindow的根视图控制器。这才是我的视图无法旋转的真正罪魁祸首。无论如何,还是谢谢! - Sani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接