iOS 轮播图Banner视频图片混合播放简单实现

先看效果啦

Banner.gif

实现

/// 播放器单例
class QPlayerManager: NSObject {

    static let shared : QPlayerManager = {
        let shared = QPlayerManager()
        return shared
    }()
    
    lazy var player = AVPlayer()
    
    lazy var layer : AVPlayerLayer = {
        let layer = AVPlayerLayer(player: player)
        return layer
    }()
   
    
    func playUrl(url : String){
        guard let url = URL(string: url) else {
            return
        }
        let item = AVPlayerItem(url: url)
        player.replaceCurrentItem(with: item)
        player.play()
    }
    
    func stop(){
        player.pause()
    }
    
}

其实代码不多,逻辑也不复杂。
Banner用的是FSPagerView
设置代理

func pagerViewDidScroll(_ pagerView: FSPagerView) {
        
        .....
        .....
        .....
     
       QPlayerManager.shared.layer.isHidden = true
       QPlayerManager.shared.stop()
        
        if item.filetype.elementsEqual("2") {
            print("播放视频")
            QPlayerManager.shared.layer.frame = pagerView.cellForItem(at: pagerView.currentIndex)!.bounds
            QPlayerManager.shared.layer.isHidden = false
            pagerView.cellForItem(at: pagerView.currentIndex)?.layer.addSublayer(QPlayerManager.shared.layer)
            QPlayerManager.shared.playUrl(url: item.file)
        }
        .....
        .....
        .....
        
    }

当然,当前ViewController不是TopViewController的时候需要停止播放

override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        QPlayerManager.shared.stop()
    }

优化建议

可以播放将视频停止前一帧截图,当未加载视频时候的预览图
视频播放的时候可以将Banner停止滚动,播放完再滚动
视频播放是铺满的,播放视频的时候把轮播图下一次滚动的时间设置无限大,通知监听视频播放完后再滚动到下一个,滚动间隔时间也恢复默认的

你可能感兴趣的:(iOS 轮播图Banner视频图片混合播放简单实现)