2014-03-27 64 views
0

我有一個問題,設置我的子類NSView的背景稱爲TitlebarView。我想通過colorWithPattternImage將圖像用作背景,但結果是黑色背景,而不是我將方法作爲參數給出的圖像。設置與圖像的自定義視圖的背景導致在黑色背景

這裏是我的TitlebarView代碼:

- (id)initWithFrame:(NSRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     NSString* pathToTitlebarBGImage = [[NSBundle mainBundle] pathForResource:@"titlebar_bg" ofType:@"png" inDirectory:@"Resources/gui_images"]; 
     NSLog(@"path to titlebar bg image: %@", pathToTitlebarBGImage); 
     // NSString* pathToTitlebarBGImage = @"Resources/gui_images/titlebar_bg.png"; 
     self.titlebarBGImage = [NSImage imageNamed:pathToTitlebarBGImage]; 
    } 
    return self; 
} 

- (void)drawRect:(NSRect)dirtyRect 
{ 
    [super drawRect:dirtyRect]; 
    [[NSColor colorWithPatternImage:self.titlebarBGImage] setFill]; 
// [[NSColor redColor] setFill]; 
    NSRectFill(dirtyRect); 
} 

titlebarBGImage是在頭文件中正確設置屬性。
如果我使用redColor這一行,我會看到紅色的視圖,所以代碼在某種程度上正在工作。對於所有我可以在文檔中找到一個在stackoverflow這應該實際上按預期工作。我在這裏錯過了什麼?

這是孤立我的整體問題的發現問題here

+0

看來,我的圖像沒有正確加載。尺寸是0,0。它在給定的路徑上。有任何想法嗎? – beipawel

回答

0

imageNamed:的一個文件名,而不是一個路徑名,並搜索在包中的文件名。如果您希望從路徑加載圖像,請使用initWithContentsOfFile:。請參閱NSImage documentation

+0

謝謝。我沒想到'imageNamed'是那麼聰明。我也嘗試'initWithContentsOfFile',但將其分配給實例變量會導致一個警告:_將保留的對象分配給不安全的屬性;對象將在assignment_ 後發佈雖然 – beipawel

+0

'imageNamed'可以正常工作您需要了解爲什麼會出現此警告,如果您沒有Obj-C編碼嘗試不會很好。在這種情況下,它表明你的財產聲明是錯誤的,因此你的代碼不安全。研究內存管理,ARC,強大,薄弱,不安全。 – CRD

+0

感謝您的提示。由於'imageNamed'方法的工作,我沒有打擾太多。但你的陳述絕對正確。 – beipawel