0

短時間で表示する必要がある一連の画像があります (PNG シーケンス)。全部で 31 個の PNG があり、それぞれのファイル サイズは約 45 KB です。私はすでに次のコードでそれらをロードしました:

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.03 秒の繰り返しタイマーです)

しかし、画像を呼び出すと、最初は非常に遅いことがわかりました。初登場以外は問題ありません。

画像のプリロードに関連していますか?または、画像のファイル サイズが大きすぎますか?

4

2 に答える 2

0

画像は、使用および表示されるときに読み込まれます。Instrumentsでタイムプロファイラーを使用すると、発生しているラグが発生します。次に、そのラグにズームして原因を調べると、通常、「copyImageBlockSetPNG」が「膨張」の直前に時間がかかる関数であることがわかります。

あなたがする方法を見つけなければならないのはあなたのイメージを作成し、あなたがそれらを必要とする前にそれらを強制的にロードすることです。それは明らかに別の話です。

于 2012-02-10T09:20:08.397 に答える
0

遅延の理由は、データのプロファイリングなしではわかりません。しかし、ここで役立つかもしれないトリックがあります: すべての画像を 1 つの大きなファイルに結合します。長方形にするようにしてください (あなたの場合は 6x6 または 4*8 かもしれません)。次に、この単一のファイルをロードし、表示用に各画像をトリミングします (つまり、タイルのサイズで表示用の画像を作成し、大きな画像から次々とタイルを表示画像にコピーします)。

于 2009-12-09T08:45:39.617 に答える