【发布时间】:2015-12-01 23:03:39
【问题描述】:
我有一个将视频用作 AVURLAsset 并按时间间隔剪切视频的功能。我也有 UIImageview IBOutlet 称为 previewImageView 我希望图像在函数执行时发生变化。该函数在 viewDidLoad 中调用。 previewImageView 似乎仅在函数完成执行后才设置。下面是我的代码
func getImagesAtInterval(url: NSURL){
let asset : AVURLAsset = AVURLAsset(URL: url, options: nil)
let duration : CMTime = asset.duration
let totalTime = Int(CMTimeGetSeconds(duration) * 1000)
let assetGenerator : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
imageSet = [UIImage]()
var value = 0
for var i : Int = 0; i < totalTime; i+=200 {
let time : CMTime = CMTimeMake(Int64(value), 1000)
var imageRef : CGImageRef!
do {
imageRef = try assetGenerator.copyCGImageAtTime(time, actualTime: nil)
} catch let error as NSError {
print("Image generation failed with error \(error)")
}
if let image : UIImage? = UIImage(CGImage: imageRef){
dispatch_async(dispatch_get_main_queue()) {
//I would like to see the images in the previewImageView
//change as the loop operates.
self.previewImageView.image = image
}
imageSet.append(image!)
}
value += 200
}
}
我已尝试按照 resourceenter link description here 中的建议进行操作
【问题讨论】:
-
UIKit 会延迟屏幕更新,以便在控制权传递回运行循环后立即完成所有操作。请改用
CADisplayLink,这将调用您在屏幕更新时提供的方法。