AVPlayer View Controller Autorotation off?

时间:2017-05-17 14:40:43

标签: ios swift avplayerviewcontroller auto-rotation

我只是在纵向模式下使用iOS应用,而且工作正常。

问题是我在navigationController上面呈现 AVPlayerViewController (两者都是以编程方式创建的)。这个玩家支持所有轮换(我不知道为什么!)。

我想将此修复为仅纵向模式,就像应用的其他部分一样。

我们怎么能这样做?

2 个答案:

答案 0 :(得分:3)

创建一个继承自AVPlayerViewController的新类,并实现支持的接口方法。在此之后,只需创建您创建的类的对象,而不是初始化AVPlayerViewController的对象。

class MyPortraitVideoController: AVPlayerViewController {


    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return .portrait
    }
}


已编辑添加

请注意Documentation for AVPlayerViewController州:

  

重要

不要继承AVPlayerViewController。压倒这一点   类的方法不受支持,导致未定义的行为。

由于这是公认的答案,我认为OP已经尝试了它并且它有效,但我想我应该在这里添加一个注释,以确保未来的读者知道任何潜在的问题。未定义的行为意味着这可能会在iOS的未来版本中停止工作。

答案 1 :(得分:0)

就我而言,我不得不限制某些视图的横向方向。因此,在 AppDelegate 中将 supportedInterfaceOrientationsFor 设置为 portrait 。当我显示AVPlayerViewController时,必须在 AppDelegate 中将 supportedInterfaceOrientationsFor 设置为 all 。 还要检查以下代码。

AppDelegate.swift

var shouldSupportLandscape = Bool()

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
     if self.shouldSupportLandscape == true {
          return .all
      }else {
          return .portrait
      }   
 }

存在时AVPlayerViewController

let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.shouldSupportLandscape = true

关闭AVPlayerViewController时

let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.shouldSupportLandscape = false