我有自定义 NSWindow,自定义 NSView 设置为其 contentView。
窗口初始化为:
[window setOpaque:NO];
[window setBackgroundColor: [NSColor clearColor]];
[window setHasShadow: NO];
[window setAcceptsMouseMovedEvents: YES];
[window setLevel: NSFloatingWindowLevel];
Run Code Online (Sandbox Code Playgroud)
内容视图,在其drawRect绘制由纯色填充的简单圆圈中。
所有这些都正常 - 窗口出现在桌面上,我看到了那个圆圈。
唯一不起作用的是:整个窗口矩形对于鼠标点击是不透明的。如果我将在圆圈外(但在不可见的窗口框内)单击,我的视图会接收 mouseDown 事件,但我希望底层窗口(或桌面)被激活。
看来我需要像 hitTest 方法在我的 NSWindow 类上被覆盖,但不幸的是没有这样的方法。
那么问题来了:是否可以在 OS X 中使用带有自定义点击区域的 NSWindow。如果“是”,那么如何?
更新:
查看按预期工作的RoundTransparentWindow示例 - 在透明区域中单击窗口。好像是这一段:
- (void)drawRect:(NSRect)rect {
...
// Reset the window shape and shadow.
if (shouldDisplayWindow) {
[[self window] display];
[[self window] setHasShadow:NO];
[[self window] setHasShadow:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
在 CustomView.m 中与问题有关,但即使有它(在我的情况下)我也无法实现鼠标点击的透明度:(
回答我自己的问题:
在 OS X 上,为了让窗口具有自定义形状并点击透明区域,必须满足以下条件:
例如,必须仅使用NSBorderlessWindowMaskset by创建窗口[window setStyleMask: NSBorderlessWindowMask]。
你不能要求[window setIgnoresMouseEvent: NO]它。由于该方法显然包含 Apple 方面的错误。
窗口的内容查看不得使用层。所以这样的事情也[[window contentView] setWantsLayer: YES]有效地禁用了点击。
以防万一:所有这些都是关于OS X 上Sciter 中的分层窗口处理
| 归档时间: |
|
| 查看次数: |
1523 次 |
| 最近记录: |