首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在AVQueuePlayer中播放完最后一项后显示工作表视图?

在AVQueuePlayer中播放完最后一项后显示工作表视图,可以通过以下步骤实现:

  1. 创建AVQueuePlayer对象,并将需要播放的AVPlayerItem添加到队列中。
  2. 监听AVPlayerItemDidPlayToEndTime通知,该通知在每个AVPlayerItem播放结束时触发。
  3. 在通知的回调方法中,判断当前播放的AVPlayerItem是否为队列中的最后一个。
  4. 如果是最后一个AVPlayerItem,创建并显示一个工作表视图(UIAlertController)。
  5. 在工作表视图中添加所需的操作按钮,例如继续播放下一个视频、重新播放队列等。
  6. 根据用户的选择,执行相应的操作。

以下是示例代码:

代码语言:txt
复制
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用于播放一个视频队列,并在播放完最后一个视频后显示一个工作表视图,提供继续播放下一个视频或重新播放队列的选项。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券