我透明NSView透明NSWindow.视图的drawRect:方法在视图上绘制一些内容(NSImages,NSBezierPaths和NSStrings),但使其中的一部分透明.
单击已绘制的视图区域将调用常用的鼠标事件处理方法(mouseDown:和mouseUp:).
单击透明区域可以聚焦透明窗口后面的任何窗口.
我想让透明区域的某些部分可以点击,以便在我的视图上绘制的元素之间意外点击不会导致窗口失去焦点.
NSView的hitTest:方法.发现hitTest:仅在单击视图的非透明区域时调用.NSView的opaqueAncestor方法.发现在单击视图的任何部分时未调用此项.[NSColor clearColor]在该drawRect:方法中填充透明区域的部分,并且具有几乎但不是非常透明的颜色.这没有效果.NSTrackingArea课程实验.这似乎只会增加支持mouseEntered:,mouseExited:,mouseMoved:,和cursorUpdate:方法,不 mouseUp:和mouseDown:.我有同样的问题.它看起来[window setIgnoresMouseEvents:NO]会这样做.
据我所知,单击事件到窗口的透明部分根本没有传递给你的应用程序,因此没有正常的事件链覆盖(即-hitTest:, - sendEvent:等)将起作用.我能想到的唯一方法是使用Quartz Event Taps来捕获所有鼠标点击,然后确定它们是否是手动覆盖窗口的透明区域.坦率地说,这听起来像是一个巨大的PITA而没有多少收益.