iOS UICollectionView慢速滚动和内存警告



我目前正在从事一个项目,该项目涉及一个由从uiimagepickercontroller进口的AVAssets填充的UICollectionView,在收藏中10个左右后,滚动变得懒惰而慢,偶尔我会收到我收到的,我会收到我收到的。内存警告。我相信要在实时发生的缩略图中存在的问题,这是我使用的代码:

- (void) setAsset:(AVAsset *)asset
{
    _asset = asset;
    AVAssetImageGenerator *generate = [[AVAssetImageGenerator alloc] initWithAsset:_asset];
    NSError *err = NULL;
    CMTime time = CMTimeMake(1, 60);
    generate.appliesPreferredTrackTransform = YES;
    CGImageRef imgRef = [generate copyCGImageAtTime:time actualTime:NULL error:&err];
    self.VideoImageView.image = [UIImage imageWithCGImage:(imgRef)];
}

是否有另一种"昂贵的方式"来实现这一目标?对此事的任何帮助将不胜感激。

您可以在背景线程上进行实时缩略图生成,然后在操作完成操作以设置实际缩略图时跳回主线程。

现在,您正在在主线程上执行所有操作,该线程会阻止UI,并使滚动型生涩。

您可以在单元格中设置占位符图像并在后台队列中生成缩略图。然后将其设置为图像视图。

asynimageView可能对您有所使用。

打开另一个线程来处理图像事物。完成图像后,切换回主线程以更新单元格。您可以使用GCD

来完成此操作

这是视频异步ganerate缩略图的代码。

-(void)generateImage
{
    NSURL *url = [NSURL fileURLWithPath:_videoPath];
    AVURLAsset *asset=[[AVURLAsset alloc] initWithURL:url options:nil];
    AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
    generator.appliesPreferredTrackTransform=TRUE;
    CMTime thumbTime = CMTimeMakeWithSeconds(30,30);
    AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){
        if (result != AVAssetImageGeneratorSucceeded) {
            NSLog(@"couldn't generate thumbnail, error:%@", error);
        }
        // TODO Do something with the image
    };
    CGSize maxSize = CGSizeMake(128, 128);
    generator.maximumSize = maxSize;
    [generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:thumbTime]] completionHandler:handler];
}

希望这对您有帮助。

最新更新