先看效果啦
Banner.gif
實(shí)現(xiàn)
/// 播放器單例
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()
}
}
其實(shí)代碼不多,邏輯也不復(fù)雜彪薛。
Banner用的是FSPagerView
設(shè)置代理
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)
}
.....
.....
.....
}
當(dāng)然,當(dāng)前ViewController不是TopViewController的時候需要停止播放
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
QPlayerManager.shared.stop()
}
優(yōu)化建議
可以播放將視頻停止前一幀截圖,當(dāng)未加載視頻時候的預(yù)覽圖
視頻播放的時候可以將Banner停止?jié)L動,播放完再滾動
視頻播放是鋪滿的奈附,播放視頻的時候把輪播圖下一次滾動的時間設(shè)置無限大,通知監(jiān)聽視頻播放完后再滾動到下一個佳晶,滾動間隔時間也恢復(fù)默認(rèn)的