如何像照片应用程序一样加载照片

时间:2011-10-27 06:15:49

标签: iphone objective-c ios cocoa-touch uiimage

我已经实现了自己的自定义UIImagePickerController,使用户可以从他们的照片库中访问图像。与传统的UIImagePickerController一样,用户从缩略图列表中选择一张照片,然后在下一个屏幕上显示照片。我正在使用ALAssets库来完成此任务。

我正在尝试解决的问题是如何加载图像,就像照片应用程序在选择缩略图后所做的那样。较大尺寸的照片可能需要一段时间才能加载,从而导致一点点打嗝并使转换非常不顺畅。

照片应用程序最初会加载图像的缩略图,然后在完成加载后使用完整图像进行更新。我已经使用[ALAsset aspectRatioThumbnail]功能使用以下代码完成了此操作:

UIImageView *imageViewTemp = [[UIImageView alloc] initWithImage: [UIImage imageWithCGImage:[self.asset aspectRatioThumbnail]]];
[self setImageView: imageViewTemp];
[[self scrollView] addSubview:[self imageView]];
[[self scrollView] setContentSize: [self.imageView.image size]];
[self setMaxMinZoomScalesForCurrentBounds];
[[self scrollView] setZoomScale: [[self scrollView] minimumZoomScale]]; 
[imageViewTemp release];

dispatch_async(dispatch_get_global_queue(0, 0), ^
{
    CGImageRef imageRef = CGImageCreateCopy(self.asset.defaultRepresentation.fullScreenImage);

    dispatch_async(dispatch_get_main_queue(), ^
    {
        UIImage *image = [[UIImage imageWithCGImage: imageRef] retain];
        [[self imageView] setImage: image];
        [image release];
        CGImageRelease(imageRef);
    });

});

此代码的问题是aspectRatioThumbnail仅适用于ios 5或更高版本,而且我注意到即使使用aspectRatioThumbnail,在缓存之前可能会有较小的打嗝来处理较大的图像。

所以我玩弄了[asset thumbnail]然而问题就是返回的缩略图是方形的,所以当你加载真实图像时它看起来很有趣。我已经尝试找到一些方法来获得全尺寸图像的尺寸,这样我就可以拉伸它,但似乎并没有很好的方法来做到这一点(http://stackoverflow.com/questions/10067765/ alasset图像尺寸)。

所以我只是想知道是否有人知道这样做会对ios4及以上版本起作用并且工作非常顺利。可能[ALAssetRepresentation CGImageWithOptions]可能会得到答案吗?

0 个答案:

没有答案