水平呈现avplayer

时间:2015-12-18 00:40:37

标签: ios swift avplayerviewcontroller

有没有办法只在应用中的一个视图控制器中允许横向模式?我是这样模仿的:

let recViewController = AVPlayerViewController()
recViewController.modalTransitionStyle = .CoverVertical
recViewController.player = AVPlayer(URL: NSURL(string: currentScores[selectedButtonIndexPath.row].recapAvailable))
recViewController.player.play()

self.view.window?.rootViewController?.presentViewController(recViewController, animated: true, completion: nil)

我知道我可以手动覆盖每个视图控制器,只允许垂直方向(上面的除外),但这看起来相当繁琐。

1 个答案:

答案 0 :(得分:0)

有没有办法只在应用中的一个视图控制器中允许横向模式?

您已自行回答了问题,请参阅' Configuring the View Rotation Settings'在UIViewController类中引用。你需要配置你的应用程序以支持你想要的所有旋转,然后覆盖每个视图控制器,是的它很乏味,但它的工作原理:)

  

处理视图旋转   从iOS 8开始,所有与旋转相关的方法都是   弃用。相反,旋转被视为大小的变化   视图控制器的视图,因此使用   viewWillTransitionToSize:withTransitionCoordinator:method。当。。。的时候   界面方向改变,UIKit在窗口上调用此方法   根视图控制器。那个视图控制器然后通知它的孩子   查看控制器,在整个视图中传播消息   控制器层次结构。

     

在iOS 6和iOS 7中,您的应用支持界面方向   在您的应用的Info.plist文件中定义。视图控制器可以覆盖   supportedInterfaceOrientations方法限制列表   支持的方向。通常,系统仅调用此方法   在窗口的根视图控制器或视图控制器上   呈现以填满整个屏幕;子视图控制器使用   窗口的一部分由父视图为它们提供   控制器,不再直接参与决定什么   支持旋转。应用程序方向的交集   掩码和视图控制器的方向掩码用于确定   视图控制器可以旋转到哪个方向。

     

您可以覆盖preferredInterfaceOrientationForPresentation   一个视图控制器,旨在全屏显示   具体方向。

     

当可见视图控制器发生旋转时,   willRotateToInterfaceOrientation:时间:,   willAnimateRotationToInterfaceOrientation:duration:,和   didRotateFromInterfaceOrientation:在调用期间调用方法   回转。 viewWillLayoutSubviews方法也在调用之后调用   视图由其父级调整大小和位置。如果是视图控制器   当方向发生变化时不可见,然后是旋转   永远不会调用方法。但是,viewWillLayoutSubviews方法   在视图变得可见时调用。你执行这个   方法可以调用statusBarOrientation方法来确定   设备方向。

修改

您还可以查看UIApplicationDelegate Protocol,它有方法

func application(application: UIApplication,
supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask

来自文档:

  

讨论

     

此方法返回界面方向的总集   该应用程序支持。在确定是否旋转特定时   视图控制器,此方法返回的方向是   与根视图支持的方向相交   控制器或最顶层的视图控制器。应用程序和视图   控制器必须在允许轮换之前达成一致。

     

如果您没有实现此方法,应用程序将使用中的值   应用程序的Info.plist的UIInterfaceOrientation键作为默认值   界面方向。