Воспроизвести только одно видео AVPlayer в UITableView - PullRequest
0 голосов
/ 28 сентября 2019

Я хочу отображать видео в UITableView, например в Instagram, которое будет воспроизводиться автоматически, когда ячейка полностью видна, и приостанавливаться, когда ячейка не полностью видна.Я попробовал это:


extension MediaViewController {
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        self.playSingleVideo()
    }

    func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
        self.playSingleVideo()
    }

    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        self.playSingleVideo()
    }
}

private extension MediaViewController {
    @objc func appEnteredToBackground() {
        self.playSingleVideo(pauseAll: true)
    }

    @objc func appEnteredFromBackground(_ notification: NSNotification) {
        self.playSingleVideo()
    }
}

private extension MediaViewController {
    func playSingleVideo(pauseAll: Bool = false) {
        if let visibleCells = self.Tableview.visibleCells as? [MediaCell], !visibleCells.isEmpty {
            if pauseAll {
                visibleCells.forEach { $0.playerView?.player?.pause() }
            } else {
                var maxHeightRequired: Int = 70
                var cellToPlay: MediaCell?

                visibleCells.reversed().forEach { (cell) in
                    let cellBounds = self.view.convert(cell.playerView.frame, from: cell.playerView)
                    let visibleCellHeight = Int(self.view.frame.intersection(cellBounds).height)

                    if visibleCellHeight >= maxHeightRequired {
                        maxHeightRequired = visibleCellHeight
                        cellToPlay = cell
                    }
                }

                visibleCells.forEach { (cell) in
                    if cell === cellToPlay {
                        cell.playerView?.player?.play()
                    } else {
                        cell.playerView?.player?.pause()
                    }
                }
            }
        }
    }
}

Но когда представление загружено, первые две ячейки начинают воспроизводиться одновременно, и только когда я прокручиваю, он начинает работать хорошо.А иногда видео даже не воспроизводится.

...