如何在 SwiftUI 中呈现全屏 AVPlayerViewController
Posted
技术标签:
【中文标题】如何在 SwiftUI 中呈现全屏 AVPlayerViewController【英文标题】:How to present a full screen AVPlayerViewController in SwiftUI 【发布时间】:2020-04-20 14:03:24 【问题描述】:在 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 中呈现全屏视频的最佳方式是什么?
【问题讨论】:
这个答案可以帮助你,你可以随意改变风格和演示模式。 ***.com/questions/60391281/… Apple 在 SwiftUI 中添加了对全屏视图的支持。它适用于我使用 UIImagePickerView,因此它也可能适用于您的 AVPlayerView/Controller。在这里查看我的答案:***.com/a/64069283/3997690 developer.apple.com/forums/thread/131762 【参考方案1】:我会使用带有 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的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 全屏 UIImagePickerController(相机)