Macos 单击NSBezierPath

Macos 单击NSBezierPath,macos,cocoa,nsview,nsbezierpath,Macos,Cocoa,Nsview,Nsbezierpath,我正在NSImageView上绘制NSBezierPath线。我正在创建NSBezierPath对象,设置moveToPoint,设置lineToPoint,设置setLineWidth:,然后在我调用的NSImageView子类的drawRect中。这一切都是我想要的,但我似乎无法使用containsPoint:方法。。。我试着实施 if([myNSBezierPath containsPoint:[theEvent locationInWindow]]{ //do something

我正在NSImageView上绘制NSBezierPath线。我正在创建NSBezierPath对象,设置
moveToPoint
,设置
lineToPoint
,设置
setLineWidth:
,然后在我调用的
NSImageView
子类的
drawRect
中。这一切都是我想要的,但我似乎无法使用
containsPoint:
方法。。。我试着实施

if([myNSBezierPath containsPoint:[theEvent locationInWindow]]{
   //do something
}
在我的NSImageView子类的
-(void)mouseUp:(NSEvent*)事件中,但它从来没有反应,我确信我达到了这一点。。。我做错什么了吗?我只需要检测是否正在单击NSBezierPath


干杯。

确保将鼠标单击位置转换为图像视图子类的坐标系,而不是窗口的坐标系(除非它们相同)。您的贝塞尔路径不知道它所绘制的偏移量,因此在执行命中测试时必须考虑到这一点

此外,从文件中:

此方法根据路径本身及其所在区域检查点 附上。在确定封闭区域中的命中率时,此方法使用 非零绕组规则(NSNonZeroWindingRule)不需要花费时间 考虑用于划过路径的线宽。


强调我的。

ImageView与窗口大小相同(相同的矩形,因为我将其用作背景),所以我认为这不是问题所在。。。我应该能够在mouseEvent hitTest中检测到NSBezierLine吗?我正在打印被点击的所有内容的类,但我永远无法获得NSBezierPath。