如何使用资产库加速图像加载?

时间:2011-10-22 00:48:54

标签: iphone ios cocoa-touch uiimage alassetslibrary

我正在编写一个应用程序,它是UIImagePicker的克隆,但使用Assets库。当用户选择照片时,图像加载需要的时间太长。我注意到当我使用与我正在开发的功能相同的照片应用程序时,图像加载速度会快一些。我听说这个网站上的另一个响应者提到了以下内容,以模仿照片应用程序的功能:

“首先加载缩略图(最好用dispatch_async) - 这应该非常快。完成后,像上面一样加载全屏图像。这就是苹果在Photo App中提供的流畅用户体验。“

有没有人有关于如何实现这一目标的代码示例?我不太清楚我明白他的意思。

此处是我用于加载图像的代码(我将图像作为参数传递给另一个视图控制器):

myImage = [UIImage imageWithCGImage:[[myAsset defaultRepresentation] fullScreenImage]];

1 个答案:

答案 0 :(得分:4)

ALAsset有两种获取缩略图的方法:

- (CGImageRef)thumbnail
- (CGImageRef)aspectRatioThumbnail

我敢打赌,他们比获得资产的全屏版本更快。

此外,您可以使用异步操作包装它们。请务必更新主线程中的UI。大概是这样的:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    /* obtain the image here */
    dispatch_async(dispatch_get_main_queue(), ^{
        /* update screen here */
    });
    [pool drain];
});

如果您需要获取视频的缩略图,请使用AVAssetImageGenerator。它有一种异步获取它们的方法。

查找Apple示例代码(AVEditDemo以及可能使用资产库的其他人)。