0

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

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

有没有人有任何代码示例说明如何实现这一点?我不太确定我明白他的意思。

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

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

1 回答 1

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 以及可能使用资产库的其他代码)。

于 2011-10-22T11:01:54.520 回答