在 iOS11 中,AVPlayerViewController 有 2 个新属性:entersFullScreenWhenPlaybackBegins 和 exitsFullScreenWhenPlaybackEnds。您可以在播放开始后立即启用全屏模式,并在播放结束时使用这些属性将其禁用。如果您需要在延迟一段时间后启用全屏模式,您可以使用 ToddH 中提到的 his answer 中提到的私有 API 方法。但是在 iOS11 中 _transitionToFullScreenViewControllerAnimated:completionHandler: 方法不再可用,有相同的方法称为 _transitionToFullScreenAnimated:completionHandler:。第二种方法接受与第一种方法相同的参数。
我可以举例说明如何使用它。首先,您需要在您的UIViewController 中创建AVPlayerViewController 实例:
private let playerController : AVPlayerViewController = {
if let urlForPlayer = URL(string: "your_video_url") {
$0.player = AVPlayer(url: urlForPlayer)
}
return $0
} (AVPlayerViewController())
然后您需要为 AVPlayerViewController 设置视图并将其添加到您当前的控制器视图中。函数setupAVplayerController可以为你做:
private func setupAVplayerController() {
self.addChildViewController(self.playerController)
self.playerController.view.frame = CGRect(x: 0.0, y: 0.0, width: 200.0, height: 200.0)
self.view.addSubview(self.playerController.view)
self.playerController.didMove(toParentViewController: self)
}
函数enterFullscreen 强制AVPlayerViewController 进入全屏模式:
private func enterFullscreen(playerViewController:AVPlayerViewController) {
let selectorName : String = {
if #available(iOS 11, *) {
return "_transitionToFullScreenAnimated:completionHandler:"
} else {
return "_transitionToFullScreenViewControllerAnimated:completionHandler:"
}
}()
let selectorToForceFullScreenMode = NSSelectorFromString(selectorName)
if playerViewController.responds(to: selectorToForceFullScreenMode) {
playerViewController.perform(selectorToForceFullScreenMode, with: true, with: nil)
}
}
现在你需要在你需要的地方调用所有这些函数,例如在viewDidAppear:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
//Your code
self.setupAVplayerController()
self.playerController.player?.play()
DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
self.enterFullscreen(playerViewController:self.playerController)
}
}
别忘了这个基于私有API调用的解决方案不推荐使用。