0

我在 Objective-c 编码方面非常陌生,并且由于视图管理问题被困了几个小时。基于 Matt Gemmel RoudedFloatingPanel,我想显示一个具有漂亮的半透明圆形背景的 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

首先,您正在泄漏一些对象:

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

那些应该是自动发布的。

至于您的具体问题,我建议使用调试器单步执行代码并检查每个语句是否按预期执行(例如,您分配的所有对象都不是零)。这将有助于解决问题。

于 2011-07-07T21:14:20.680 回答
0

Sergio 是对的,我必须管理我的视图框架:

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

您的代码中有一些令人惊讶的事情。

由于您显然是子类化NSWindowTransparentWindow?),您最好将它添加一个属性,您可以在 alloc/init 序列之后设置该属性。

您还可以将此属性添加到您提供的NSView( RoundedView?) 的明显子类中。

您的评论表明您正在测试获取icon某些应用程序的属性。尝试将图像添加到您的捆绑包中,使用以下内容更容易加载:

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

,其中PNG格式当然是一个例子。

希望这可以帮助。

于 2011-07-07T21:21:31.270 回答