如何在 SwiftUI 中呈现全屏 AVPlayerViewController
How to present a full screen AVPlayerViewController in SwiftUI
在 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。
.sheet(isPresented: $showingDetail) {
PlayerViewController(videoURL: URL(string: "..."))
.edgesIgnoringSafeArea(.all)
}
这不会为您提供带有关闭按钮的全屏视频,而是一个 sheet 模式,可以将其滑开。
在标准的非SwiftUI Swift 中,最好的方法似乎是展示这个控制器...
let controller = PlayerViewController(videoURL: URL(string: "..."))
self.present(controller, animated: true)
...但是 SwiftUI 中没有 self.present
。在 SwiftUI 中呈现全屏视频的最佳方式是什么?
而不是 sheet 我会使用 ZStack 的解决方案(如果需要,可能使用自定义转换),如下所示
ZStack {
// ... other your content below
if showingDetail { // covers full screen above all
PlayerViewController(videoURL: URL(string: "..."))
.edgesIgnoringSafeArea(.all)
//.transition(AnyTransition.move(edge: .bottom).animation(.default)) // if needed
}
}
在 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。
.sheet(isPresented: $showingDetail) {
PlayerViewController(videoURL: URL(string: "..."))
.edgesIgnoringSafeArea(.all)
}
这不会为您提供带有关闭按钮的全屏视频,而是一个 sheet 模式,可以将其滑开。
在标准的非SwiftUI Swift 中,最好的方法似乎是展示这个控制器...
let controller = PlayerViewController(videoURL: URL(string: "..."))
self.present(controller, animated: true)
...但是 SwiftUI 中没有 self.present
。在 SwiftUI 中呈现全屏视频的最佳方式是什么?
而不是 sheet 我会使用 ZStack 的解决方案(如果需要,可能使用自定义转换),如下所示
ZStack {
// ... other your content below
if showingDetail { // covers full screen above all
PlayerViewController(videoURL: URL(string: "..."))
.edgesIgnoringSafeArea(.all)
//.transition(AnyTransition.move(edge: .bottom).animation(.default)) // if needed
}
}