UIKit 正确的方法:
根据苹果在主题上的 WWDC 2019 演讲,AVPlayerViewController
应该模态呈现,以利用 API 的所有最新全屏特性。这是建议从你的 UIKit 呈现视图控制器调用的示例代码:
// Create the player
let player = AVPlayer(url: videoURL)
// Create the player view controller and associate the player
let playerViewController = AVPlayerViewController()
playerViewController.player = player
// Present the player view controller modally
present(playerViewController, animated: true)
这个工作符合预期,可以在漂亮的全屏中启动视频。
如何使用SwiftUI实现相同效果?:
为了从SwiftUI使用AVPlayerViewController
,我创建了UIViewControllerRepresentable
的实现:
struct AVPlayerView: UIViewControllerRepresentable {
@Binding var videoURL: URL
private var player: AVPlayer {
return AVPlayer(url: videoURL)
}
func updateUIViewController(_ playerController: AVPlayerViewController, context: Context) {
playerController.player = player
playerController.player?.play()
}
func makeUIViewController(context: Context) -> AVPlayerViewController {
return AVPlayerViewController()
}
}
我似乎找不到方法直接从SwiftUI中以与
AVPlayerViewController
在UIKit中直接呈现的方式呈现它。 我的目标只是获得所有默认的全屏优势。
到目前为止,以下尝试都没有成功:
- 如果我使用
.sheet
修饰符并从其中呈现它,则播放器将嵌入在表中而不是全屏呈现。 - 我也尝试在UIKit中创建一个自定义的空视图控制器,该控制器只是从
viewDidAppear
方法模态地呈现我的AVPlayerViewController
。这使播放器占据了整个屏幕,但它还显示了一个空的视图控制器,然后再显示视频,这不是我想让用户看到的。
如有建议,非常感谢!