在iPhone App中将图像加载到内存中

时间:2012-02-23 14:13:29

标签: ios objective-c

我有UImageView,点击按钮后我想更改UImage中的UImageView。应用程序有22个UImages,每个图像大小超过5 MB,因此UImageView在单击按钮时需要一些时间来加载图像,是否有办法将这些图像加载到内存中这样图像视图花费较少的时间来显示图像?

我使用以下代码设置图片:

 [ImageView setImage:[UIImage imageNamed:@"ImageName.jpg"]];

基本上我想要滑动要更改的图像,例如如果用户从右向左滑动,则应用必须显示下一个图像,并且从左到右单击要加载的背面图像。请建议。

3 个答案:

答案 0 :(得分:1)

像@Gobot提到的那样,这是减少图片大小的最佳方式。对于滑动,不需要使用这样的大图片。您可以创建两个文件夹,一个是小尺寸图片,另一个是较大图片。如果你滑过,你只需使用小图片。如果用户点击图片,您可以获得所选UIImage的名称并仅加载此单张图片。这样你也可以提供高质量的图片放大。请记住,你的应用程序包也越大,你包含的图片越多。

WWDC Stream中有一个很好的解释:iOS App Performance: Graphics and Animations

我还在NSMutableArray类别中创建了一个方法,用于加载我的所有UIImages一次。您可以在viewDidLoad

中使用此方法
- (NSMutableArray *)getImagesWithStartSuffix:(NSString *)start 
                                andEndSuffix:(NSString *)end{

    NSMutableArray *imageArray = [[NSMutableArray alloc] init];

    for (int i = 1; i < 100 + 2; i++) {

        NSString *fileName = [NSString stringWithFormat:@"%@%d%@.jpg", 
                                        start, i, end];

        if([self fileExistsInProject:fileName]){

            [imageArray addObject:[UIImage imageNamed:fileName]];
        } else {

            break;
        }
    }
    return imageArray;
}

通过撰写Apple Script,还可以通过一种非常简单的方式来更改图片的大小。您可以在所有图片上运行循环并以这种方式调整它们的大小。这是最简单的方法,您不必使用GimpPS等任何工具:

do shell script "sips [path_to_file]/picture1.jpg -z 666 1000 --out [path]/changedSize/picture1_small.jpg" 

答案 1 :(得分:0)

来自文档:

  

此方法在系统缓存中查找具有指定名称的图像对象,并返回该对象(如果存在)。如果匹配的图像对象尚未在缓存中,则此方法从指定的文件加载图像数据,对其进行缓存,然后返回结果对象。

如果花费太长时间,您可能需要在应用中添加进度指示器,直到生成/加载完整视图,然后将其显示在屏幕上。

答案 2 :(得分:0)

第一个也是最简单的选择是减少5MB以下的图像。他们真的需要那么大吗?他们是缩略图吗?更复杂的选择是使用调度队列在后台线程中加载/缓存图像(异步)。