cocoa - 如何用CALayer实现NSView上的鼠标点击?

标签 cocoa core-animation mouseevent calayer nswindow

我有一个圆形的自定义无边框 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/

相关文章:

iphone - 格式化 NSNumber 对象时如何指定小数位?

cocoa - 将源文件添加到不用于编译的 cocoa 项目

iphone - rtod() 未按预期工作。可能滥用?

c++ - Objective-C - 与 C++ 桥接的缺点?

ios - CAScrollLayer 内的自滚动文本

ios - 为什么这个形状没有动画?

java - 在 Java 中 MousePressed 之后,MouseMoved 不会被触发

C# Vlc Player鼠标双击事件

objective-c - 获取 CALayer 的圆角内容区域轮廓作为剪切路径

javascript - 防止 C# 中的默认鼠标行为 - wpf