我正在使用AVPlayer
在TableViewCell
中显示视频。它正在TableViewCell
中播放,但问题是我无法阻止它。
我已经使用此代码在cellforRow中播放视频
avPlayer = AVPlayer(url: videoURL! as URL)
playerLayer = AVPlayerLayer(player: avPlayer)
playerLayer.frame = CGRect(x: cell.videoview.frame.origin.x, y: cell.videoview.frame.origin.x, width:cell.videoview.frame.size.width, height: cell.videoview.frame.size.height)
cell.videoview.layer.addSublayer(playerLayer)
avPlayer?.play()
avPlayer
和playerLayer
在此viewController
中定义
var avPlayer : AVPlayer?
var playerLayer = AVPlayerLayer()
我正在使用此代码停止视频
self.avPlayer?.pause()
self.playerLayer.removeFromSuperlayer()
self.avPlayer?.rate = 0.0
self.avPlayer?.replaceCurrentItem(with: nil)
self.avPlayer = nil
我的问题是如何在AVPlayer
上停止AVPlayerLayer
上的视频?
请提出一个解决方案,如果有任何替代方案,请同时建议。
答案 0 :(得分:1)
由于单元格的可重用行为,它会释放子视图实例,因此您必须在didEndDisplayingCell
委托方法中将其停止。
override func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if let cell = cell as? MyCustomCell {
if let play = player {
print("stopped")
play.pause()
player = nil
print("player deallocated")
} else {
print("player was already deallocated")
}
}
}
OR
您可以获取单元格实例并搜索播放器实例并将其停止。
for view in cell.subviews {
//after comparison stop the player here
}
答案 1 :(得分:0)
AVPlayer没有停止方法。因此,您可以将寻道时间设置为0并暂停播放器。
videoPlayer.seek(to: CMTimeMake(0, 1))
videoPlayer.pause()
此外,如果您想检查videoCell是否可见。您可以使用下面的代码,它将为您提供可见的单元格索引数组。因此,您只需检查数组是否包含视频单元索引。
tableView.indexPathsForVisibleRows