如何在SwiftUI的AVPlayer中显示视频结束时的播放按钮

如何在SwiftUI的AVPlayer中显示视频结束时的播放按钮,swift,swiftui,avplayer,avplayerviewcontroller,Swift,Swiftui,Avplayer,Avplayerviewcontroller,我试图在视频结束时显示默认的播放图标。作为默认行为,它显示所有其他控件,如第二张图所示,但我希望播放按钮与第一张图相同 我正在使用下面的代码 struct AVPlayerView: UIViewControllerRepresentable { var videoURL: URL @State var playerController:AVPlayerViewController? @State var player:AVPlayer?

我试图在视频结束时显示默认的播放图标。作为默认行为,它显示所有其他控件,如第二张图所示,但我希望播放按钮与第一张图相同

我正在使用下面的代码

struct AVPlayerView: UIViewControllerRepresentable {
    
    var videoURL: URL
    @State var playerController:AVPlayerViewController?
    @State var player:AVPlayer?
    
    func makeUIViewController(context: UIViewControllerRepresentableContext<AVPlayerView>) -> AVPlayerViewController {
        
        let controller = AVPlayerViewController()
        controller.player = AVPlayer(url: videoURL)
        controller.videoGravity = .resizeAspect
        
        self.player = controller.player
        self.playerController = controller
        
        return controller
    }

    func updateUIViewController(_ uiViewController: AVPlayerViewController, context: UIViewControllerRepresentableContext<AVPlayerView>) {
    }
}
struct AVPlayerView:UIViewControllerRepresentable{
var videoURL:URL
@状态变量playerController:AVPlayerViewController?
@状态变量播放器:AVPlayer?
func makeUIViewController(上下文:UIViewControllerRepresentableContext)->AVPlayerViewController{
let controller=avplayervewcontroller()
controller.player=AVPlayer(url:videoURL)
controller.videoGravity=.resizeAspect
self.player=controller.player
self.playerController=控制器
返回控制器
}
func updateUIViewController(uViewController:AVPlayServiceWController,上下文:UIViewControllerRepresentableContext){
}
}

我计划在视频结束时重新初始化AVPlayer,但不确定这是否正确。

以下是我所做的,效果很好

struct AVPlayerView: UIViewControllerRepresentable {

    var videoURL: URL
    let controller = AVPlayerViewController()

    func makeUIViewController(context: UIViewControllerRepresentableContext<AVPlayerView>) -> AVPlayerViewController {
        
        controller.player = AVPlayer(url: videoURL)
        controller.videoGravity = .resizeAspect
        
        self.addPeriodicTimeObserver()
        
        return controller
    }

    func updateUIViewController(_ uiViewController: AVPlayerViewController, context: Context) {

    }

    func addPeriodicTimeObserver() {
        self.controller.player?.addPeriodicTimeObserver(forInterval: CMTime(seconds: 1, preferredTimescale: CMTimeScale(NSEC_PER_SEC)), queue: DispatchQueue.main, using: { (currentTime) in
            if let endTime = self.controller.player?.currentItem?.duration {
                if currentTime == endTime {
                    // Reset the player
                    self.controller.player = AVPlayer(url: self.videoURL)
                    self.addPeriodicTimeObserver()
                }
            }
        })
    }
}
struct AVPlayerView:UIViewControllerRepresentable{
var videoURL:URL
let controller=avplayervewcontroller()
func makeUIViewController(上下文:UIViewControllerRepresentableContext)->AVPlayerViewController{
controller.player=AVPlayer(url:videoURL)
controller.videoGravity=.resizeAspect
self.addPeriodicTimeObserver()
返回控制器
}
func updateUIViewController(uUIViewController:AVPlayerViewController,上下文:上下文){
}
func addPeriodicTimeObserver(){
self.controller.player?.addPeriodicTimeObserver(forInterval:CMTime(秒数:1,首选时间刻度:CMTimeScale(NSEC_/秒)),队列:DispatchQueue.main,在中使用:{(currentTime))
如果让endTime=self.controller.player?.currentItem?持续时间{
如果currentTime==endTime{
//重置播放器
self.controller.player=AVPlayer(url:self.videoURL)
self.addPeriodicTimeObserver()
}
}
})
}
}