Я использую следующий код, чтобы создать панель миниатюр:Создание бар миниатюр с AVAssetImageGenerator
NSArray *times = [self timesForDuration:_videoAsset.duration andCount:self.numberOfThumbnails];
__block int i = 0;
[_imageGenerator generateCGImagesAsynchronouslyForTimes:times completionHandler:^(CMTime requestedTime, CGImageRef image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error) {
if (result == AVAssetImageGeneratorSucceeded) {
UIImageView *imageView = [self imageViewForImage:image atPosition:i];
CGImageRelease(image);
dispatch_async(dispatch_get_main_queue(), ^{
[_videoBarView addSubview:imageView];
});
}
++i;
}];
Это вроде работает, но проблема заключается в том, что вид в целом обновления очень медленно, и вы можете см. пробелы в баре ... через некоторое время на панели отображаются все запрошенные эскизы, как ожидалось.
Из отладчика я могу сказать, что генерация миниатюр на самом деле довольно быстро, так что происходит здесь?
Я видел обходное решение, которое будет генерировать каждое изображение синхронно, используя copyCGImageAtTime
, но это может сделать пользовательский интерфейс неактуальным.