阻止AVPlayer在tableviewcell中播放

时间:2017-08-03 09:50:07

标签: ios swift uitableview avplayer

我正在使用AVPlayerTableViewCell中显示视频。它正在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()

avPlayerplayerLayer在此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上的视频? 请提出一个解决方案,如果有任何替代方案,请同时建议。

2 个答案:

答案 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