无边框的窗口和可可粉的阴影

时间:2011-07-08 13:56:03

标签: cocoa macos

我创建了一个无边框窗口,我想删除它的阴影。

这是我的初始窗口代码:

- (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但没有任何事情发生,影子仍然显示。

我如何删除阴影?

1 个答案:

答案 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文件并连接所有插座后调用。