AVPlayer 视图控制器自动旋转关闭?

AVPlayer View Controller Autorotation off?

我正在开发一个 iOS 仅纵向模式的应用程序,它工作正常。

问题是我在 navigationController 上方显示 AVPlayerViewController(均以编程方式创建)。此播放器支持所有轮换(我不知道为什么!)。

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

我们该怎么做?

创建新的class 继承自AVPlayerViewController 并像这样实现支持的接口方法。在此之后,不要初始化 AVPlayerViewController 的对象,只需创建您创建的 class 的对象。

class MyPortraitVideoController: AVPlayerViewController {


    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return .portrait
    }
}


编辑添加

请注意 Documentation for AVPlayerViewController 状态:

Important

Do not subclass AVPlayerViewController. Overriding this class’s methods is unsupported and results in undefined behavior.

因为这是公认的答案,我假设 OP 已经尝试过并且有效,但我认为我应该在这里添加一个注释,以确保未来的读者意识到任何潜在的问题。未定义的行为意味着这可能会在 iOS.

的未来版本中停止工作

在我的例子中,我不得不限制一些横向方向 views.So 我在 [=] 中将 supportedInterfaceOrientationsFor 设置为 portrait 21=]AppDelegate。当我呈现 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