我有一个圆形的自定义无边框 NSWindow。为此,我使用自定义 NSView 来绘制实心圆。
鼠标点击窗口内容矩形内的透明像素会直接穿过窗口到达其后面的任何应用程序。实心圆圈内的点击被我的应用程序拦截。到目前为止一切顺利。
问题是,使用以下行,上述行为会发生变化,并且窗口内容矩形内的所有点击都会被拦截,无论是否透明像素:
[circleView setWantsLayer:YES];
有没有办法让 CALayer
实例的透明像素上的点击通过窗口/ View /层到达其背后的应用程序?
本质上与下面描述的问题完全相同(只是该解决方案并非在所有情况下都有效,因为它不支持动画):
http://www.cocoabuilder.com/archive/cocoa/235281-clicking-through-nsview-with-calayers.html
最佳答案
我不完全确定这是否适用于图层支持的 View ,但可能的解决方案是在您的圆形 View 子类上覆盖 - (NSView *)hitTest:(NSPoint)aPoint
并检查是否aPoint
位于圆的路径内。如果它在圆圈之外,则从该方法返回 nil
应该会导致点击被传递。
关于cocoa - 如何用CALayer实现NSView上的鼠标点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5379336/