2017-01-30 223 views
0

我想将图像生成到滚动视图(就像视频开始在默认的ios播放器中播放时一样)。如何使用“generateCGImagesAsynchronously”从视频加载图像序列?

let imageView = UIImageView() 
let asset :AVAsset = AVURLAsset.init(url: url as URL) 
let assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset) 
assetImgGenerate.appliesPreferredTrackTransform = true 
assetImgGenerate.requestedTimeToleranceAfter = kCMTimeZero; 
assetImgGenerate.requestedTimeToleranceBefore = kCMTimeZero; 

var img = UIImage() 

assetImgGenerate.appliesPreferredTrackTransform = true 
let thumbTime: CMTime = asset.duration 
let times = thumbTime as NSValue 

assetImgGenerate.generateCGImagesAsynchronously(forTimes: [times], completionHandler: {(requestedTime, image, actualTime,result, error) -> Void in 
    img = UIImage(cgImage: image!) 
    imageView.image = img 
}) 

scrollView.backgroundColor = UIColor.black 
scrollView.contentSize = CGSize(width: CGFloat(imageView.frame.width), height: 0) 
scrollView.addSubview(imageView)} 

这不会给出任何输出。如何将图像生成为序列以在滚动视图中显示?

我在这里做错了什么?

回答

1

有在你的代码中的一些错误:

  1. 你问AVAssetGenerator一些图片在特定的时间,但在块你总是分配最后一个图像视图。
  2. 您的滚动视图(假设您设置正确)具有图像视图的宽度,可能在分配时为0,高度也设为0.
  3. 您可能错过了AVAssetGenerator异步生成图像,因此在第一张图像返回到块内之前设置滚动视图的设置
  4. 尝试纸上的所有内容,如果您总是设置相同的图像视图,那么如何创建一种连续图像滚动视图?您应该循环浏览所有返回的图像,为每个图像创建一个图像视图,并排放置它们并相应地设置内容大小。

    最后一张图片在内存使用上相当昂贵。
+1

谢谢你的回应。我知道我需要为每个返回值创建图像视图,我相信我需要遍历每个“times”变量的值。但我该怎么做,我是新来的。我应该在哪里放置循环执行?你能不能请教我。在此先感谢兄弟。 – fAiSaL

+0

现在工作正常。我编码,就像你说的。我只有我缺乏的东西=逻辑。 Boooomm – fAiSaL

+0

但正如你所说,图像在这里创造了很多记忆,我能做些什么来解决这个问题? – fAiSaL

相关问题