2012-10-22 123 views
0

我很難理解爲什麼下面的代碼不起作用,我想要實現的是在NSView的左上角顯示的圖像,但沒有任何顯示...cocoa - 在NSView中繪製圖像

NSImage *map0 = [NSImage imageNamed:@"map0.png"]; 
NSRect rect = NSMakeRect(0, 0, 400, 400); 
[map0 drawInRect:rect fromRect:NSZeroRect operation:NSCompositeSourceAtop fraction:1.0f]; 
[map drawRect:rect]; 

編輯:

map是一個NSView我想成將圖像繪製成

+2

你能解釋一下最後一行嗎?這個上下文中的map變量是什麼,爲什麼它需要繪製與你的圖像相同的矩形? – Tim

+0

對不起,我忘了說,地圖是NSView ... –

回答

2

永遠不要直接調用drawRect:。這個例程有許多由Cocoa提供的前提條件,例如創建CGContextRef。您執行drawRect:。可可調用它。

您的drawInRect:fromRect:operation:fraction:呼叫應該被放入的map,這應該是NSView的子類。使用NSImageView而非自定義NSView通常可以更好地解決此特定問題,但如果繪圖更復雜,則自定義NSView是合適的。

+0

對於以下情況,你會推薦什麼:我想實現的是一張地圖,而我有6張圖像共同創建了一幅世界地圖應該以某種方式可拖動和可縮放,所以想象它有點像谷歌地圖... NSView或NSImageView? –

+0

要做出比屏幕大得多的拖動和縮放以及良好的性能,您經常需要CATiledLayer。但是,如果這是您的第一個應用程序,您可能希望從簡單的事情開始,並在滾動視圖中放置6個圖像瀏覽。對於只有屏幕尺寸6倍的東西,它可能足夠快。 –

+0

你是怎麼猜測這是我的第一個應用程序? :無論如何,滾動視圖的想法是好的,它聽起來更簡單,然後我會嘗試去CATiledLayer。謝謝你的幫助 :) –