Objective c 添加子视图问题
我对objective-c的编码相当陌生,因为视图管理问题,我被困了几个小时。 基于Matt Gemmel RoudedFloatingPannel,我想显示一个带有半透明圆形背景的NSImageObjective c 添加子视图问题,objective-c,addsubview,Objective C,Addsubview,我对objective-c的编码相当陌生,因为视图管理问题,我被困了几个小时。 基于Matt Gemmel RoudedFloatingPannel,我想显示一个带有半透明圆形背景的NSImage //CREATE THE TRANSPARENT WINDOW window = [[TransparentWindow alloc] initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingS
//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];
似乎我做错了什么,因为我只显示背景。有人能帮我吗
提前谢谢。
盖尔。首先,您正在泄漏一些对象:
[window setContentView:[[RoundedView alloc] init]];
...
NSImageView *img = [[NSImageView alloc] init];
这些应该自动释放
至于您的具体问题,我建议使用调试器逐步检查代码,并检查每个语句是否按预期执行(例如,您分配的所有对象都不是零)。这将有助于找出问题。您的代码中有一些令人惊讶的地方 由于您显然是子类化了
NSWindow
(TransparentWindow
?),因此您最好将其添加到一个属性中,您可以在alloc/init序列之后设置该属性
您还可以将此属性添加到您提供的NSView
(RoundedView
?)的表观子类中
您的评论表明您正在测试某个应用程序的图标属性。尝试将图像添加到捆绑包中,可以更轻松地加载以下内容:
[[NSBundle mainBundle] pathForResource:@"imageFilename"
ofType:@"png"];
,其中PNG格式当然是一个例子
希望这有帮助。塞尔吉奥是对的,我必须管理我的视图框架:
NSImageView *img = [[[[NSImageView alloc] initWithFrame:[[window contentView] frame]] retain] autorelease];
嗨,谢谢你提醒我关于泄漏的事。我只是想做一个概念证明,我完全忘记了内存管理。关于您的建议,如果我将NSImageView添加为内容视图,然后添加roundedview,我只会看到NSImageView,这意味着我在尝试覆盖这两个视图时遇到问题。您是否检查了视图框架?您的圆形视图是什么样的视图?