我创建了一个无边框窗口,我想删除它的阴影。
这是我的初始窗口代码:
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)windowStyle
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)flag
{
if (![super initWithContentRect: contentRect
styleMask: NSBorderlessWindowMask
backing: NSBackingStoreBuffered
defer: NO]) return nil;
[self setHasShadow:NO];
[self setOpaque:NO];
[self setBackgroundColor:[NSColor clearColor]];
[self setAcceptsMouseMovedEvents:YES];
return self;
}
正如你所看到我使用setHasShadow:NO
但没有任何事情发生,影子仍然显示。
我如何删除阴影?
答案 0 :(得分:3)
嗯,首先,您应该将调用结果分配给super
self
:
self = [super initWithContentRect: contentRect
styleMask: NSBorderlessWindowMask
backing: NSBackingStoreBuffered
defer: NO];
if(self)
{
//continue with initialisation
}
return self;
此外,如果从笔尖加载窗口,它可能在Interface Builder中指定了阴影。由于在调用init方法后加载了nib中的设置,因此它们可能会覆盖init方法中的设置。
然后,解决方案是确保窗口没有在Interface Builder中选中“影子外观”复选框,或者在[self setHasShadow:NO]
而不是初始化程序中调用‑awakeFromNib
。
‑awakeFromNib
总是在加载nib文件并连接所有插座后调用。