アプリで使用したい一連の画像があります。私がやりたかったのは、 drawRect: 関数内で簡単に識別できるように、それらを NSArray に格納することです。
.plist ファイルを作成しました。このファイルには、NSDictionary の詳細が示されています。キーは単純に昇順の整数値であり、値は画像ファイル名に対応しています。これにより、辞書を繰り返し処理し、一連の NSImage オブジェクトを配列に追加できます。ここで for ループを使用しているのは、順序が重要であり、高速な列挙では辞書から読み取るときに実行順序が保証されないためです。
現在、私は次のことを行っています:(これはNSViewのサブクラスにあります)
@property (strong) NSDictionary *imageNamesDict;
@property (strong) NSMutableArray *imageArray;
...
// in init method:
_imageNamesDict = [[NSDictionary alloc] initWithContentsOfFile:@"imageNames.plist"];
_imageArray = [[NSMutableArray alloc] initWithCapacity:[_imageNamesDict count]];
for (int i=0; i<_imageNamesDict.count; i++) {
NSString *key = [NSString stringWithFormat:@"%d", i];
[_imageArray addObject:[NSImage imageNamed:[_imageNamesDict objectForKey:key]];
}
// When I want to draw a particular image in drawRect:
int imageToDraw = 1;
// Get a pointer to the necessary image:
NSImage *theImage = [_imageArray objectAtIndex:imageToDraw];
// Draw the image
NSRect theRect = NSMakeRect (100,100, 0, 0);
[theImage drawInRect:theRect fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0];
これはすべて正常に動作しているように見えますが、1 つの癖があります。ディスプレイを描画するときに発生するわずかな遅延に気付きましたが、これは初めて新しい画像を描画するときだけです。各画像が少なくとも 1 回表示されると、ラグなしで任意の画像を再描画できます。
画像を適切に読み込んでいないということですか、または for ループに追加するオブジェクトを作成するときに各画像を事前にキャッシュする方法はありますか?
ありがとう!