0

我有一系列需要在短时间内显示的图像(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的重复定时器)

但是我发现当我第一次调用图像时,它非常滞后。除了第一个外观,其他外观都没有问题。

它与预加载图像有关吗?还是我的图像文件太大?

4

2 回答 2

0

如果不分析数据,就很难判断滞后的原因。但这里有一个技巧可能会有所帮助:将所有图像合并到一个大文件中。试着把它做成矩形(在你的情况下可能是 6x6 或 4*8)。然后加载这个单个文件并裁剪每个图像以供显示(即创建一个具有平铺大小的显示图像并将一个平铺从大图像一个接一个地复制到显示图像中)。

于 2009-12-09T08:45:39.617 回答
0

图像在使用和显示时被加载。如果您在 Instruments 中使用时间分析器,您将遇到延迟。如果您然后放大到该延迟并查看导致它的原因,您通常会看到“copyImageBlockSetPNG”是需要时间的函数,就在“inflate”之前。

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

于 2012-02-10T09:20:08.397 回答