首页
学习
活动
专区
工具
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用于播放一个视频队列,并在播放完最后一个视频后显示一个工作表视图,提供继续播放下一个视频或重新播放队列的选项。

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

相关·内容

iOS8统一的系统提示控件——UIAlertController

相信在iOS开发中,大家对UIAlertView和UIActionSheet一定不陌生,这两个控件在UI设计中发挥了很大的作用。然而如果你用过,你会发现这两个控件的设计思路有些繁琐,通过创建设置代理来进行界面的交互,将代码逻辑分割了,并且很容易形成冗余代码。在iOS8之后,系统吸引了UIAlertController这个类,整理了UIAlertView和UIActionSheet这两个控件,在iOS中,如果你扔使用UIAlertView和UIActionSheet,系统只是会提示你使用新的方法,iOS9中,这两个类被完全弃用,但这并不说明旧的代码将不能使用,旧的代码依然可以工作很好,但是会存在隐患,UIAlertController,不仅系统推荐,使用更加方便,结构也更加合理,作为开发者,使用新的警示控件,我们何乐而不为呢。这里有旧的代码的使用方法:

01
领券