有没有办法只在应用中的一个视图控制器中允许横向模式?我是这样模仿的:
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)
我知道我可以手动覆盖每个视图控制器,只允许垂直方向(上面的除外),但这看起来相当繁琐。
答案 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键作为默认值 界面方向。