如何使用" generateCGImages异步加载视频中的图像序列"?

时间:2017-01-30 13:50:07

标签: ios swift

我想在Scroll视图中生成图像(就像视频开始在默认的ios播放器中播放一样)。

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 个答案:

答案 0 :(得分:1)

您的代码中存在一些错误:

  1. 您在特定时间向AVAssetGenerator询问一些图像,但在块中,您始终将最后一个图像分配给图像视图。
  2. 您的滚动视图(假设您正确设置)具有图像视图的宽度,可能在分配时为0,高度也设置为0.
  3. 您可能错过了AVAssetGenerator异步生成图像的点,因此在块内返回第一个图像之前设置了scrollview的设置
  4. 在纸上尝试所有内容,如果您始终设置相同的图像视图,您应该如何创建一种连续图像scrollview?您应该遍历所有返回的图像,为每个图像创建一个图像视图,并排放置它们并相应地设置内容大小。

    最后一个问题图像的内存使用非常昂贵。