2011-07-07 68 views
0

我在Objective-C編碼方面很新穎,並且因視圖管理問題而被關閉了幾個小時。 基於馬特Gemmel RoudedFloatingPannel,我想顯示一個很好的半透明圓形背景的NSImage。添加子視問題

//CREATE THE TRANSPARENT WINDOW 
window = [[TransparentWindow alloc] initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]; 

//ADD THE ROUNDED BACKGROUND    
[window setContentView:[[RoundedView alloc] init]]; 

//GET RUNNING APPLICATION 
NSArray *RunningApps = [[NSWorkspace sharedWorkspace] runningApplications]; 

//PREPARE TEST IMAGE VIEW 
NSImage *image = [[RunningApps objectAtIndex:9] icon]; 
NSImageView *img = [[NSImageView alloc] init]; 
[img setImage:image]; 

//DISPLAY THE ICON      
[[window contentView] addSubview:img]; 

看來我做錯了什麼,因爲我只顯示背景。有人可以幫助我嗎?

在此先感謝。 蓋爾。

回答

0

首先,你都滲出了一些對象:

[window setContentView:[[RoundedView alloc] init]]; 
... 
NSImageView *img = [[NSImageView alloc] init]; 

那些應該被自動釋放。

至於你的具體問題,我會建議用調試器遍歷代碼,並檢查每個語句是否按預期執行(例如,你分配的所有對象不是零)。這將有助於找出問題。

+0

嗨感謝警告我網站的泄漏。我只是想做一個概念證明,而我完全忘記了內存管理。關於你的建議,如果我添加NSImageView作爲內容視圖,然後添加圓角視圖,我只能看到NSImageView,這實際上意味着我試圖覆蓋兩個視圖時遇到問題。 – Gael

+0

你檢查了視圖框架嗎? RoundedView是什麼樣的視圖? – sergio

0

你的代碼中有一些令人驚訝的東西。

正如你明顯地劃分了NSWindowTransparentWindow?),你可能最好添加一個你可以在alloc/init序列後面設置的屬性。

您也可以將此屬性添加到您提供的NSViewRoundedView?)的表觀子類中。的

[[NSBundle mainBundle] pathForResource:@"imageFilename" 
           ofType:@"png"]; 

,其中PNG格式:

您的意見建議你正在做一個測試得到了一些application.Try添加圖像到捆綁的icon屬性,它會更容易與像加載當然是一個例子。

希望這會有所幫助。

0

塞爾吉奧是正確的,我必須管理我的看法框架:

NSImageView *img = [[[[NSImageView alloc] initWithFrame:[[window contentView] frame]] retain] autorelease];