在iPhone应用程序中预加载图像?

时间:2009-12-09 08:31:29

标签: iphone calayer preloading

我需要在短时间内显示一系列图像(PNG序列)。共有31个PNG,每个文件大小约为45KB。我已经使用以下代码加载它们:

imgArray = [[NSMutableArray alloc] init];
for(int i = 0; i <= 30; i++) {
    NSString * filename = [NSString stringWithFormat:@"img_000%.2d.png", i];
    UIImage *temp = [UIImage imageNamed:filename];
    [imgArray addObject:temp];
    [temp release];
    temp = nil;
} 

我使用以下代码显示图像:

CGImageRef image = [(UIImage *)[imgArray objectAtIndex:imgFrame] CGImage];
imgLayer.contents = (id)image;
if(imgFrame < 29) {
    imgFrame++;
} else {
    imgFrame = 0;
    imgLayer.hidden = TRUE;
    [imgTimer invalidate];
}

其中imgLayer是CALayer。 (imgTimer是一个间隔为0.03s的重复计时器)

但是我发现当我把图像叫出来时,它第一次非常迟钝。除了第一次出现外,其他外观都没有问题。

是否与预加载图像有关?或者我的图片文件大小太大了?

2 个答案:

答案 0 :(得分:0)

如果没有分析数据,很难说出你的滞后的原因。但这里有一个可能有用的技巧:将所有图像加入一个大文件中。尽量使它成矩形(在你的情况下可能是6x6或4 * 8)。然后加载这个单个文件并裁剪出每个图像以进行显示(即创建一个图像以显示一个图块的大小,并将一个图块从大图像中复制到另一个图像中)。

答案 1 :(得分:0)

使用和显示图像时会加载图像。 如果您使用仪器中的时间分析器,您将遇到滞后的问题。如果你然后缩放到那个滞后并查看导致它的原因,你通常会看到“copyImageBlockSetPNG”是在“膨胀”之前花费时间的函数。

您必须找到的方法是创建图像并在需要之前强制加载它们。那显然是另一个故事。