我有一系列想在应用程序中使用的图像。我想要做的是将它们存储在 NSArray 中,以便在 drawRect: 函数中轻松识别。
我创建了一个 .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];
这一切似乎都可以正常工作,但有一个怪癖。我注意到在绘制显示时会出现少量延迟,但仅在第一次绘制新图像时才会出现。一旦每个图像至少被看到一次,我就可以重新绘制任何想要的图像,而不会出现任何延迟。
是我没有正确加载图像,还是有什么方法可以在我创建要添加到 for 循环的对象时预先缓存每个图像?
谢谢!