0

私は Objective-C でのコーディングが初めてで、ビュー管理の問題で数時間立ち往生しています。Matt 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];

背景しか表示されないので、何か間違っているようです。誰かがこれについて私を助けることができますか?

前もって感謝します。ガエル。

4

3 に答える 3

0

セルジオは正しいです、私は自分のビューのフレームを管理しなければなりませんでした:

NSImageView *img = [[[[NSImageView alloc] initWithFrame:[[window contentView] frame]] retain] autorelease];
于 2011-08-19T18:37:19.333 に答える
0

まず、いくつかのオブジェクトをリークしています:

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

それらは自動解放されるべきです。

特定の問題に関しては、デバッガーを使用してコードをステップ実行し、各ステートメントが期待どおりに実行されることを確認することをお勧めします (たとえば、割り当てたすべてのオブジェクトが nil ではないこと)。これは、問題を突き止めるのに役立ちます。

于 2011-07-07T21:14:20.680 に答える
0

あなたのコードにはいくつかの驚くべきことがあります。

明らかにサブクラス化したようにNSWindow( TransparentWindow?)、alloc/init シーケンスの直後に設定できるプロパティを追加することをお勧めします。

このプロパティを、提供するNSView( RoundedView?) の見かけのサブクラスに追加することもできます。

あなたのコメントはicon、いくつかのアプリケーションのプロパティを取得するテストを行っていることを示唆しています。バンドルに画像を追加してみてください。次のようなもので簡単にロードできます。

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

もちろん、PNG形式は一例です。

お役に立てれば。

于 2011-07-07T21:21:31.270 に答える