在 AVQueuePlayer 中播放完最后一项后如何显示工作表视图?
Posted
技术标签:
【中文标题】在 AVQueuePlayer 中播放完最后一项后如何显示工作表视图?【英文标题】:How to show sheet view after last item finished playing in AVQueuePlayer? 【发布时间】:2020-08-11 20:27:54 【问题描述】:我正在使用AVQueuePlayer
播放一系列视频,但在最后一个视频之后,我看到AVQueuePlayer
在没有剩余视频时尝试播放下一个视频。而我想要做的是在最后一个项目完成播放后切换一个布尔值以显示工作表视图。你能帮我解决这个问题吗?感谢您的关注。我期待着您的回复。这是我的代码:
`struct Button : View
@Binding var player : AVQueuePlayer
@Binding var isplaying : Bool
@State var showEnd = false
var removal: (() -> Void)? = nil
var body : some View
Button(action:
self.player.advanceToNextItem()
)
Image(systemName: self.isplaying ? "pause.fill" : "play.fill")
.font(.title)
.foregroundColor(.black)
.padding(20)
struct VideoPlayerS : UIViewControllerRepresentable
@State var showEnd = false
var work : WorkoutDeS
@Binding var player : AVQueuePlayer
var playerLayer = AVPlayerLayer()
public func makeUIViewController(context: Context) -> AVPlayerViewController
let items = [
AVPlayerItem(url: URL(fileURLWithPath: String(work.url1))),
AVPlayerItem(url: URL(fileURLWithPath: String(work.url2)))
]
let player = AVQueuePlayer(items: items)
let controller = AVPlayerViewController()
DispatchQueue.main.async
self.player = player
controller.player = player
controller.videoGravity = .resizeAspectFill
player.actionAtItemEnd = .none
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.player.currentItem, queue: .main) _ in
self.player.seek(to: CMTime.zero)
self.player.play()
player.play()
return controller
`
【问题讨论】:
【参考方案1】:在队列玩家的currentItem
上设置观察者。当调用观察者方法并且播放器中没有项目时,它已经播放了最后一个项目。
【讨论】:
以上是关于在 AVQueuePlayer 中播放完最后一项后如何显示工作表视图?的主要内容,如果未能解决你的问题,请参考以下文章
Swift:在avqueueplayer中播放完毕后重播视频