如何在SwiftUI中呈现一个全屏的AVPlayerViewController?

问题描述 投票:0回答:1

在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)
}

这并不是给你一个全屏视频的解雇按钮,而是给你一个可以滑动的 sheet modal。

在标准的非SwiftUI Swift中,似乎最好的方法是用这个控制器来呈现......但SwiftUI并没有这样做。

let controller = PlayerViewController(videoURL: URL(string: "..."))
self.present(controller, animated: true)

...但SwiftUI并没有一个真正意义上的 self.present 作为其中的一部分。在SwiftUI中呈现全屏视频的最佳方式是什么?

swiftui avplayerviewcontroller
1个回答
1
投票

我将使用ZStack的解决方案来代替sheet(如果需要的话,可能会有自定义的过渡),就像下面这样。

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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.