Я загружаю видео в AVPlayer в виде коллекции, но он повторяет данные некоторых ячеек - PullRequest
0 голосов
/ 29 мая 2019

Я загружаю видео в AVPlayer в виде коллекции. Некоторые клетки повторяют данные. Как решить эту проблему?

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell:homecollCell = self.collectionview.dequeueReusableCell(withReuseIdentifier: "homecollCell", for: indexPath) as! homecollCell
    //cell.player?.pause()

    let obj = self.friends_array[indexPath.row] as! Home

    cell.img.sd_setImage(with: URL(string:self.appDelegate.imgbaseUrl!+obj.thum), placeholderImage: UIImage(named: ""))

    let url = URL.init(string: self.appDelegate.imgbaseUrl!+obj.video_url)

    let screenSize: CGRect = UIScreen.main.bounds
    cell.playerItem = AVPlayerItem(url: url!)
    //cell.player!.replaceCurrentItem(with: cell.playerItem)
    cell.player = AVPlayer(playerItem: cell.playerItem!)
    cell.playerLayer = AVPlayerLayer(player: cell.player!)
    cell.playerLayer!.frame = CGRect(x:0,y:0,width:screenSize.width,height: screenSize.height)
    cell.playerLayer!.videoGravity = AVLayerVideoGravity.resizeAspectFill
    cell.playerView.layer.addSublayer(cell.playerLayer!)

    cell.player?.play()

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

Ячейки можно использовать повторно, поэтому вы должны удалить или отменить изменения, сделанные вами в других ячейках, используя prepareForReuse(). Просто так. Назовите это внутри cell.

override func prepareForReuse() {
     super.prepareForReuse()
     self.label.text = nil
}
0 голосов
/ 29 мая 2019

Перемещение AVPlayerLayer и инициализация слоя внутри класса вашей ячейки.homecollCell в вашем случае.

Переопределите prepareForReuse() внутри вашего класса. Документы

Внутри prepareForReuse, остановите игрока и удалите добавленный слой AVPlayerLayer с removeFromSuperlayer Документами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...