В SwiftUI кажется, что лучший способ настроить AVPlayerViewController - это использовать UIViewControllerRepresentable таким образом, как-то так ...
struct PlayerViewController: UIViewControllerRepresentable {
var videoURL: URL?
private var player: AVPlayer {
return AVPlayer(url: videoURL!)
}
func makeUIViewController(context: Context) -> AVPlayerViewController {
let controller = AVPlayerViewController()
controller.modalPresentationStyle = .fullScreen
controller.player = player
controller.player?.play()
return controller
}
func updateUIViewController(_ playerController: AVPlayerViewController, context: Context) {
}
}
Однако из документации это единственный способ показать этот контроллер в полноэкранном режиме представляет его в виде листа.
.sheet(isPresented: $showingDetail) {
PlayerViewController(videoURL: URL(string: "..."))
.edgesIgnoringSafeArea(.all)
}
Это не дает вам полноэкранное видео с кнопкой отклонения, а модальный лист, который можно вместо этого сильно ударить .
В стандартном SwiftUI Swift, казалось бы, лучший способ представить этот контроллер ...
let controller = PlayerViewController(videoURL: URL(string: "..."))
self.present(controller, animated: true)
... но SwiftUI не имеет self.present
как часть этого. Как лучше всего представить полноэкранное видео в SwiftUI?