Swift - 水平滚动集合视图单元格(自动和手动)

时间:2017-03-13 06:56:58

标签: ios swift scroll uicollectionviewcell

在我的应用程序中,我使用AVPlayer播放视频。通过使用以下功能,我每秒从视频中获取帧(如果视频长度为2分钟(120秒),我将获得120帧)。此帧存储在数组 videoFrames

Google Play Services

此视频帧位于水平滚动UICollectionView中,如此enter image description here

  

现在我需要从右边自动移动UICollectionView单元格   离开并允许用户(如果愿意)手动滚动。   (在iPhone / iPod中播放视频时功能完全相同   等)

我找到了这段代码......

var videoFrames = [UIImage]()
 func generateFrames(url: NSURL, fromTime: Float64) {
        let asset: AVAsset = AVAsset(url: url as URL)
        let assetImgGenerate: AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
        assetImgGenerate.maximumSize = CGSize(width: 300, height: 300)
        assetImgGenerate.appliesPreferredTrackTransform = true
        let time: CMTime = CMTimeMakeWithSeconds(fromTime, 600)
        var img: CGImage?
        do {
            img = try assetImgGenerate.copyCGImage(at: time, actualTime: nil)
        } catch {
        }
        if img != nil {
            let frameImg: UIImage = UIImage(cgImage: img!)
            videoFrames.append(frameImg)
        } else {
//            return nil
        }
    }

但在完成视频之前,自动滚动结束。我无法确定 UIView.animate() withDuration:参数的值应该是多少。此外,如果我添加此 autoScroll()函数,我无法手动滚动UICollectionView单元格。但我需要自动和两个手动。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

你可以做的是最初创建一个名为 index 的变量,其值为0.现在创建一个Timer函数,每1秒触发一次并重复自身,在{的选择器内{1}}只需使用集合视图的Timer方法,并继续增加 index 变量。

现在,当用户开始在scrollToItem中滚动时,只是使计时器无效并根据滚动量计算索引。滚动后,再次重新启动计时器。请记住将视频移动到适当的位置!

修改

collectionView