在我的应用程序中,我使用AVPlayer播放视频。通过使用以下功能,我每秒从视频中获取帧(如果视频长度为2分钟(120秒),我将获得120帧)。此帧存储在数组 videoFrames
中Google Play Services
此视频帧位于水平滚动UICollectionView中,如此
现在我需要从右边自动移动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单元格。但我需要自动和两个手动。 任何帮助将不胜感激。
答案 0 :(得分:1)
你可以做的是最初创建一个名为 index 的变量,其值为0.现在创建一个Timer
函数,每1秒触发一次并重复自身,在{的选择器内{1}}只需使用集合视图的Timer
方法,并继续增加 index 变量。
现在,当用户开始在scrollToItem
中滚动时,只是使计时器无效并根据滚动量计算索引。滚动后,再次重新启动计时器。请记住将视频移动到适当的位置!
修改强>
collectionView