在AVQueuePlayer中播放完最后一项后显示工作表视图,可以通过以下步骤实现:
以下是示例代码:
import AVFoundation
import UIKit
class ViewController: UIViewController {
var queuePlayer: AVQueuePlayer?
var playerItems: [AVPlayerItem] = []
override func viewDidLoad() {
super.viewDidLoad()
// 创建AVPlayerItem并添加到队列中
let videoURLs = ["video1.mp4", "video2.mp4", "video3.mp4"]
for url in videoURLs {
if let videoURL = Bundle.main.url(forResource: url, withExtension: nil) {
let playerItem = AVPlayerItem(url: videoURL)
playerItems.append(playerItem)
}
}
// 创建AVQueuePlayer并设置队列
queuePlayer = AVQueuePlayer(items: playerItems)
// 监听AVPlayerItemDidPlayToEndTime通知
NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: .AVPlayerItemDidPlayToEndTime, object: nil)
// 播放第一个视频
queuePlayer?.play()
}
@objc func playerDidFinishPlaying(notification: Notification) {
guard let currentItem = queuePlayer?.currentItem else {
return
}
// 判断当前播放的AVPlayerItem是否为队列中的最后一个
if currentItem == playerItems.last {
// 创建工作表视图
let alertController = UIAlertController(title: "播放完成", message: "是否继续播放下一个视频?", preferredStyle: .actionSheet)
// 添加继续播放按钮
let continueAction = UIAlertAction(title: "继续播放", style: .default) { (_) in
// 播放下一个视频
self.queuePlayer?.advanceToNextItem()
}
alertController.addAction(continueAction)
// 添加重新播放按钮
let replayAction = UIAlertAction(title: "重新播放", style: .default) { (_) in
// 重新播放队列中的第一个视频
self.queuePlayer?.seek(to: CMTime.zero)
self.queuePlayer?.play()
}
alertController.addAction(replayAction)
// 添加取消按钮
let cancelAction = UIAlertAction(title: "取消", style: .cancel, handler: nil)
alertController.addAction(cancelAction)
// 显示工作表视图
present(alertController, animated: true, completion: nil)
}
}
}
这是一个基本的示例,你可以根据实际需求进行修改和扩展。在这个示例中,AVQueuePlayer用于播放一个视频队列,并在播放完最后一个视频后显示一个工作表视图,提供继续播放下一个视频或重新播放队列的选项。
领取专属 10元无门槛券
手把手带您无忧上云