我有一系列想要在應用程序中使用的圖像。我想要做的就是將它們存儲在NSArray中,以便在drawRect:函數中輕鬆識別。這是一個實現NSImages數組的適當方式嗎?
我已經創建了一個.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循環的對象時預先緩存每個圖像?
謝謝!
這甚至不會運行,因爲您已經定義_imageArray爲一個NSMutableDictionary而不是一個NSMutableArray。 – rdelmar
詞典不是有序的關係。與其試圖通過使用表示索引的數字的字符串強制使用鍵,爲什麼不使用數組呢? –
哎呀,這是一個錯字!對不起,我將編輯帖子來糾正這個!這是一個很好的觀點,我不知道我的邏輯是在哪裏使用NSDictionary,而不是數組來自於思考它!使用數組也會使管理plist變得更簡單! – tom1990