【问题标题】:How to Play video on visible and pause video invisible collectionview cell?如何在可见和暂停视频不可见 collectionview 单元格上播放视频?
【发布时间】:2021-03-11 05:27:06
【问题描述】:

我想创建一个功能,我想在其中播放或暂停 colletionview 单元格上的视频。 在我的应用程序中,我使用了两个单元格,一个用于视频,另一个用于静态单元格(仅图像) 播放我使用 AVKit 和 AVFoundation 的视频,它工作正常。

为了获得完整的可见单元格,我使用this code

我的问题是 我可以获得可见的单元格编号,但我不知道如何使用该代码在完整的可见单元格上播放并在单元格不可见时暂停视频。

【问题讨论】:

    标签: ios swift uicollectionview avplayer swift5


    【解决方案1】:

    您可以使用scrollViewDidEndDecelerating委托方法,获取可见单元格并检查这些可见单元格的框架是否在集合视图的边界内,

    extension ViewController : UICollectionViewDelegateFlowLayout {
        func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
            let visibleCells = self.collectionView.visibleCells
            for cell in visibleCells {
                if self.collectionView.bounds.contains(cell.frame) { // condition here should do the trick to find cells which are completely visible in collection view
                    cell.playVideo() //probably you can play video here
                }
                else {
                    cell.pauseVideo() //you can pause video here
                }
            }
        }
    }
    

    最后在你的单元格中实现 prepareForResuse 并暂停视频

    override func prepareForReuse() {
        super.prepareForReuse()
        //you can pause your video here
       // not sure which component you are using, if using AVPlayerLayer might reset it or dispose it entirely depends on your usecase 
    }
    

    【讨论】:

    • 我想像 YouTube 应用一样播放视频,其中,当单元格有点可见时,它会播放视频并在顶部单元格不可见时暂停,我的演示应用程序在两个单元格之间有空间。我正在使用 AVplayer。
    • @hm108:你试过我发布的答案吗,它实际上做了同样的事情,但是条件只会播放完全可见的单元格的视频(如果你希望它在部分可见的情况下播放单元格也只需删除 if 条件)您可以在所有可见单元格中开始视频。 prepareForReuse 将确保在单元格超出可见区域并即将被重复使用时停止视频。
    • 我写的是 cell.player?.play() 而不是 cell.playVideo(),它给出的错误类似于 - 'UICollectionViewCell' 类型的值没有成员 'player'
    • @hm108:伙计,我怎么知道你的代码,你没有写任何有问题的东西,当我写cell.playVideo()时,它的意思是写代码来播放视频,答案不是为了复制粘贴它是为了解释想法,如果您提供了有问题的代码,我会针对您的问题量身定制我的答案,如果答案帮助您考虑通过单击答案旁边的刻度线来考虑接受它
    • 嗨!,它的工作谢谢桑迪普班达里。我只是给出正确的单元格名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2015-09-11
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2021-10-15
    相关资源
    最近更新 更多