gpt4 book ai didi

swift - 点击自定义 NSWindow

转载 作者:行者123 更新时间:2023-12-04 02:03:02 27 4
gpt4 key购买 nike

我有自定义 NSWindow,自定义 NSView 设置为它的 contentView。

窗口被初始化为:

[window setOpaque:NO];
[window setBackgroundColor: [NSColor clearColor]];
[window setHasShadow: NO];

[window setAcceptsMouseMovedEvents: YES];
[window setLevel: NSFloatingWindowLevel];

内容 View ,在其 drawRect绘制由纯色填充的简单圆圈。

所有这些都可以正常工作 - 窗口出现在桌面上,我看到了那个圆圈。

唯一不起作用的是:整个窗口矩形对于鼠标点击是不透明的。如果我单击圆圈外(但在不可见的窗口框内),我的 View 会收到 mouseDown 事件,但我希望激活底层窗口(或桌面)。

看来我需要在我的 NSWindow 类上覆盖 hitTest 方法之类的东西,但不幸的是没有这样的方法。

那么问题来了:是否可以在 OS X 中通过自定义点击区域来使用 NSWindow。如果"is",那么如何?

更新:

关注 RoundTransparentWindow按预期工作的示例 - 在透明区域中单击窗口。好像是这个片段:
- (void)drawRect:(NSRect)rect {
...
// Reset the window shape and shadow.
if (shouldDisplayWindow) {
[[self window] display];
[[self window] setHasShadow:NO];
[[self window] setHasShadow:YES];
}
}

在 CustomView.m 中与问题有关,但即使使用它(在我的情况下)我也无法实现鼠标点击的透明度:(

最佳答案

回答我自己的问题:

在 OS X 上,为了使窗口具有自定义形状并单击透明区域,必须满足以下条件:

  • 橱窗必须是 仅使用 NSBorderlessWindowMask 创建由 [window setStyleMask: NSBorderlessWindowMask] 设置例如。
  • 不得 调用[window setIgnoresMouseEvent: NO]在上面。因为该方法显然包含苹果方面的错误。
  • 窗口的内容 View 不得 使用图层。所以像这样的[[window contentView] setWantsLayer: YES]也有效地禁用了点击。

  • 以防万一:所有这些都是关于 Sciter 中的分层窗口处理在 OS X 上

    "Sciter clock" sample on Windows, OS X and Linux

    关于swift - 点击自定义 NSWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29441015/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com