В iOS11 есть 2 новые свойства для AVPlayerViewController
: entersFullScreenWhenPlaybackBegins
и exitsFullScreenWhenPlaybackEnds
. Вы можете включить полноэкранный режим сразу после начала воспроизведения и отключить его, когда воспроизведение заканчивается этими свойствами. Если вам нужно включить полноэкранный режим после некоторой задержки, вы можете использовать частные методы API как ToddH, упомянутые в his answer. Однако в iOS11 _transitionToFullScreenViewControllerAnimated:completionHandler:
метод больше не доступен, существует тот же метод, что и _transitionToFullScreenAnimated:completionHandler:
. Второй метод принимает те же аргументы, что и первый.
Я могу показать пример того, как его использовать. Прежде всего, вам нужно создать AVPlayerViewController
экземпляр в вашем UIViewController
:
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, которые не рекомендуется использовать.
Я нахожусь в том же положении, что и вы. Похоже, в настоящее время для этого нет никакой работы. @ Ответ Стефана на самом деле не «полный экран» игрока, а просто делает его больше, что, как вы говорите, приводит к тому, что элементы управления не обновляются должным образом, и вы не можете узнать, нажал ли человек кнопку «Готово» или «свернуть». Не имеет значения, хотя, поскольку это начнется с расширения стрелка в любом случае, что неверно. В моем случае мне придется изменить приложение, чтобы обойти ограничения AVPlayerViewController. Надеюсь, они исправит это в какой-то момент. –
Такая же проблема. Это странно, потому что есть [apple tech talk] (http://asciiwwdc.com/2016/sessions/506?q=avplayerviewcontroller), где они говорят, что вы должны представить контроллер просмотра, чтобы сделать его полноэкранным. –