【问题标题】:Setting the shadow of a window in Cocoa?在 Cocoa 中设置窗口的阴影?
【发布时间】:2012-02-03 05:26:02
【问题描述】:

我创建了一个自定义窗口来覆盖 NSWindow。除了它有阴影之外,它工作得很好。我使用 [self setHasShadow:NO] 以编程方式设置阴影,但它仍然存在。但是,如果我检查 [self hasShadow],它会返回 false。

似乎让阴影消失的唯一方法是在 Interface Builder 中关闭阴影。是的,我意识到这没关系,但我很好奇为什么即使其他编程设置也不会覆盖 Interface Builder 设置。

我不允许发布任何代码,因此请不要要求我这样做。

除了 [self setHasShadow:NO] 以编程方式设置窗口的阴影之外,我还需要做任何事情吗?

编辑:awakeFromNib 调用[self setHasShadow:NO] 会使阴影消失。但是我想直接从构造函数中删除阴影而不是awakeFromNib

Mac OSX 雪豹,Xcode 3.2.6

【问题讨论】:

  • 如果您将[self setHasShadow:NO] 放入awakeFromNib,而不是在您的初始化中会发生什么?
  • @sudorm-rf 我尝试将 [self setHasShadow:NO] 放入 awakeFromNib 中,这会使阴影消失。但如果我可以直接在构造函数中执行此操作,我会更喜欢。在调用构造函数和调用 awakeFromNib 之间有什么可能会改变设置?
  • 好吧,问题是IB在调用初始化之后配置你的窗口。 awakeFromNib 在 IB 初始化您的视图后调用。因此,IB 中的(大多数)设置将优先于初始化程序中的设置。
  • @sudorm-rf 但是我在构造函数中以编程方式调用了许多未被 IB 覆盖的东西(即延迟标志)。我很好奇为什么 [self:setHasShadow:NO] 特别没有被覆盖。

标签: objective-c macos cocoa user-interface window


【解决方案1】:

如果您在“awakeFromNib”中调用它或像这样制作无边框窗口,则可以做到这一点:

- (id)initWithContentRect:(NSRect)contentRect
        styleMask:(NSUInteger)windowStyle
          backing:(NSBackingStoreType)bufferingType
            defer:(BOOL)flag
{

self = [super initWithContentRect: contentRect
              styleMask: NSBorderlessWindowMask 
                backing: NSBackingStoreBuffered
                  defer: NO];

if(self)
{
    [self setHasShadow:NO];

    [self setBackgroundColor:[NSColor clearColor]];
    [self setOpaque:NO];
}   

return self;
}

** 我不知道你是否有标题栏。如果你有你应该使用 styleMask: NSTitledWindowMask 如果不是 NSBorderlessWindowMask

但如果您不想创建无边框窗口,当您从“awakeFromNib”调用时它也应该可以工作:

-(void)awakeFromNib {
    [self setHasShadow:NO];
}

我希望你为你的窗口类选择你自己的书面类??您可以在此处执行此操作:

如果你使用无边框窗口,你也应该写这个来禁用阴影:

-(BOOL)hasShadow {
    return NO;
}

【讨论】:

  • 我有一个你提到的无边框窗口,并选择了我的窗口类。然而,只有当我从 awakeFromNib 调用 [self setHasShadow:NO] 时,阴影才会消失。如果只从构造函数中调用它为什么不起作用?
  • 你也应该写-(BOOL)hasShadow,看看我在底部的答案更新。
猜你喜欢
  • 1970-01-01
  • 2013-06-10
  • 2019-01-10
  • 2012-11-02
  • 2011-05-13
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多