У меня есть функция, которая использует видео как AVURLAsset и разрезает видео с временными интервалами. У меня также есть UIImageview IBOutlet, называемый previewImageView, который я хотел бы, чтобы изображения менялись по мере выполнения функции. Эта функция вызывается в viewDidLoad. Кажется, что PreviewImageView настроен после того, как функция завершила выполнение. Мой код нижеИзменение UIImageView UIImage во время выполнения цикла
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
}
}
Я пытался сделать, как предложено в ресурс enter link description here
задержки UIKit экранировать обновления, чтобы сделать их все сразу управление переходит к циклу запуска. Вместо этого используйте 'CADisplayLink', который вызовет метод, который вы дадите ему на экранных обновлениях. – jcaron