2010-02-04 66 views
0

這裏是我到目前爲止的代碼(在抽籤RECT):繪製到NSImage中的子類的NSView

// Drawing code here. 
NSLog(@"%@", [[NSBundle mainBundle] pathForResource:@"NoiseBGMainView" ofType:@"jpg"]); 
NSURL *pathToBGImage = [[NSURL alloc] initWithString:[[NSBundle mainBundle] pathForResource:@"NoiseBGMainView" ofType:@"jpg"]]; 
NSImage *NoiseBGMainView = [[NSImage alloc] initWithContentsOfURL:pathToBGImage]; 
[NoiseBGMainView drawInRect:[self bounds] fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1]; 

而且圖像不畫......我不知道什麼是錯的事。

+2

您是否證明'noiseBGMainView'不是'nil'? – 2010-02-05 03:53:40

+0

我該如何檢查? – nanochrome 2010-02-05 04:21:03

+1

NSLog它,就像你做URL一樣。 – 2010-02-05 04:27:13

回答

4

爲什麼不直接使用[NSImage imageNamed:@"NoiseBGMainView.jpg"]呢?這會給你一個NSImage你的照片(如果它能找到它的話),如果它不能的話nilNSLog該調用的結果是什麼,然後返回並報告是否記錄(null)或不。

+0

路徑一切正常,它的繪圖是問題 – nanochrome 2010-02-04 22:04:26

+0

只是想回答這個問題。 +1 – 2010-02-04 22:04:37

+1

那麼,即使路徑正常,使用'imageNamed:'更好,因爲您顯示的代碼每次運行時都會泄漏NSURL和NSImage。 – Kelan 2010-02-04 23:03:37

1

您可以將NSImage繪製到NSView中,無需編寫任何繪圖代碼,只需將NSImageView附加到您的視圖並將圖像資源設置爲NSImageView的圖像即可。 (NSImageView處理所有的繪圖)。

如果您的自定義NSView是從nib加載的,則不需要任何設置代碼 - 只需使用Interface Builder進行相應的NSView-NSImageView-NSImage(資源)連接即可。

+0

我有這個,這是行不通的: 'NSImage * noiseBGMainView = [NSImage imageNamed:[[NSBundle mainBundle] pathForResource:@「NoiseBGMainView」ofType:@「jpg」]]; \t NSLog(@「%@」,noiseBGMainView); \t NSImageView * bgImageView = [[NSImageView alloc] init]; \t [bgImageView setImage:noiseBGMainView]; \t [self addSubview:bgImageView];' 任何想法什麼是錯誤的? – nanochrome 2010-02-05 05:54:02

+1

如果你以編程方式設置NSImageView(而不是IB),你需要給它一個非零的框架。 嘗試更改: NSImageView * bgImageView = [[NSImageView alloc] init]; 收件人: NSImageView * bgImageView = [[NSImageView alloc] initWithFrame:NSMakeRect(0,0,100,100)]; – 2010-02-05 07:06:20

+0

工程很好,但我需要重複的圖像? – nanochrome 2010-02-08 01:42:20

1
NSURL *pathToBGImage = [[NSURL alloc] initWithString:[[NSBundle mainBundle] pathForResource:@"NoiseBGMainView" ofType:@"jpg"]]; 

這是錯誤的。 -[NSURL initWithString:]採用URL的字符串版本,例如http://apple.com/,而不是路徑名。

由於您未傳遞網址,因此網址將是相對網址,但相對網址需要基準。該URL是一個有效的對象,但不會導致任何地方。這反過來導致initWithContentsOfURL:返回nil(因爲您嘗試從沒有基數的相對URL加載圖像)。然後,您嘗試告訴圖像繪製,但是您沒有圖像,因此沒有任何反應。

你想要initFileURLWithPath:。 (或者類方法fileURLWithPath:,您不需要稍後發佈URL。)