如何用透明的NSView在透明的NSWindow上绘图?

mc_*_*rum 5 cocoa nsview nswindow drawrect nswindowcontroller

我想在具有透明背景的屏幕上绘制,以便所有内容(例如打开的应用程序仍然可见)。

在我的自定义 NSWindowController 的 windowDidLoad 中,我有以下内容:

[self.window setOpaque: NO];
[self.window setHasShadow:NO];
[self.window setBackgroundColor:[NSColor clearColor]];
[self.window setStyleMask:NSBorderlessWindowMask]; 
Run Code Online (Sandbox Code Playgroud)

我的自定义 NSWindow 覆盖 canBecomeKeyWindow

- (BOOL)canBecomeKeyWindow {
   return YES;
}
Run Code Online (Sandbox Code Playgroud)

我的视图覆盖了drawRect

- (void)drawRect:(NSRect)rect {
  [[NSColor clearColor]set];
  NSRectFill(rect);
  ...
}
Run Code Online (Sandbox Code Playgroud)

问题:尝试在自定义视图内使用鼠标事件进行绘制会导致窗口下方的视图/应用程序接收这些事件。

当我不将 NSWindow styleMask 设置为 NSBorderlessWindowMask 或将自定义视图的背景颜色设置为半透明时,它就可以工作。

[[NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:0.05] set]
Run Code Online (Sandbox Code Playgroud)

如何在完全透明和 NSBorderlessWindowMask 的屏幕上绘图?

mc_*_*rum 0

添加

[self.window setIgnoresMouseEvents:NO];
Run Code Online (Sandbox Code Playgroud)

我的自定义 NSWindowController 的 windowDidLoad 解决了它