【问题标题】:Make borderless window with darker larger shadow用更暗的大阴影制作无边框窗口
【发布时间】:2012-02-15 10:06:11
【问题描述】:

当窗口在无边框窗口中变为活动状态时,如何创建更暗和更大的阴影?

我将 NSWindow 子类化,我的窗口成为主窗口和关键窗口,但这没有帮助.. 阴影仍然很小。所以也许有人知道如何解决这个问题?我也尝试过使影子无效,但这也没有帮助..

子类化 NSWindow:

- (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:YES];

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

return self;
}

【问题讨论】:

    标签: xcode macos cocoa xcode4.2 nswindow


    【解决方案1】:

    如果这是我的问题,我可能会为无边框窗口关闭阴影属性关闭,然后从我的 display 函数中处理阴影绘制NSWindow 子类(确保调用 [super display] 以便各种内容和子视图调用自己的绘制方法)。

    这里是a potentially related question with an answer for you to consider

    【讨论】:

    • 感谢您的快速回复。嗯..那没有解决问题..在你给我的例子中是同样的问题(RoundTransparentWindow 项目)。在这个项目中总是像我的应用程序中一样小阴影。我试过你的建议[超级显示],但这也没有帮助。
    • 我的意思是,当调用display 时,您应该自己绘制阴影。 AFAIK,这是您获得比操作系统提供的“更暗更大的阴影”的唯一方法。当display 被调用时,获取窗口框架的矩形,然后找出如何在这些边界之外绘制一个矩形。
    • 嗯.. 感谢您的建议,我会尝试这样做。 +1
    • 我有一个类似的问题,因为我正在定义自己的自定义无边框窗口,并且想要绘制阴影来模仿 Apple 的窗口阴影。我注意到绘制的默认阴影似乎与 Apple 为所有非键窗口(小)绘制的阴影相同。关键窗口的更大、更丰富的阴影似乎不适用于自定义无边框窗口。也许是苹果方面的疏忽?即使覆盖 -canBecomeKeyWindow 和 -canBecomeMainWindow 以返回 YES。让我们知道进展如何。
    【解决方案2】:

    这与窗口的 styleMask 相关联。如果设置为 NSTitledWindowMask 窗口会得到更大的阴影。

    【讨论】:

      【解决方案3】:

      总的来说,我认为 Dalmazio 的观察是正确的,即无论出于何种原因,无边框窗户的阴影都不那么明显。也许用苹果文件雷达。

      【讨论】:

        猜你喜欢
        • 2017-04-05
        • 1970-01-01
        • 1970-01-01
        • 2020-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多