У меня есть приложение, которое заблокировано в портретном режиме (только флажок "портрет" отмечен в настройках сборки в XCode). В ViewController у меня есть AVPlayerViewController в контейнере, который загружает удаленный URL.
Насколько я понимаю, начиная с WWDC19 / iOS 13, AVPlayerController автоматически обрабатывает просмотр ландшафта, даже в приложениях, которые предназначены только для переноса. Так обстоит дело в моем приложении - AVPlayerController правильно переключается в горизонтальное положение с поворотом устройства. Кроме того, если я использую кнопку закрытия / «X», чтобы вывести плеер из полноэкранного режима в любой ориентации, он корректно возвращает обратно в портретную ориентацию.
Проблема с жестами и проведением пальцем по экрану. Если я проведу пальцем по экрану в портретном полноэкранном режиме, он вернется обратно к портретному ViewController. Однако, если я проведу пальцем по экрану в полноэкранном режиме, я получу черный экран. Звук продолжает воспроизводиться, но приложение полностью не отвечает, просто черный экран.
Я также получаю черный экран, если я делаю жест смахивания вверх в любой ориентации. Похоже, видеокадр пытается go вернуться на исходное место, но затем становится черным.
Я попытался поиграть с viewWillAppear из ViewController и попробовал делегировать методы AVPlayerViewControllerDelegate, но безуспешно.
Вот код, который я использую в своем классе ViewController:
import UIKit
import AVKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
configureVideoPlayer()
}
private func configureVideoPlayer() {
let playerViewController = AVPlayerViewController()
let url: URL! = URL(string: "https://www.radiantmediaplayer.com/media/bbb-360p.mp4")
let player = AVPlayer(url: url)
playerViewController.player = player
playerViewController.frame = containerView.bounds
containerView.addSubview(playerViewController.view)
addChild(playerViewController)
}