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
我正在开发一个 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