Macos 单击NSBezierPath
我正在NSImageView上绘制NSBezierPath线。我正在创建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
moveToPoint
,设置lineToPoint
,设置setLineWidth:
,然后在我调用的NSImageView
子类的drawRect
中。这一切都是我想要的,但我似乎无法使用containsPoint:
方法。。。我试着实施
if([myNSBezierPath containsPoint:[theEvent locationInWindow]]{
//do something
}
在我的NSImageView子类的-(void)mouseUp:(NSEvent*)事件中,但它从来没有反应,我确信我达到了这一点。。。我做错什么了吗?我只需要检测是否正在单击NSBezierPath
干杯。确保将鼠标单击位置转换为图像视图子类的坐标系,而不是窗口的坐标系(除非它们相同)。您的贝塞尔路径不知道它所绘制的偏移量,因此在执行命中测试时必须考虑到这一点
此外,从文件中:
此方法根据路径本身及其所在区域检查点
附上。在确定封闭区域中的命中率时,此方法使用
非零绕组规则(NSNonZeroWindingRule)不需要花费时间
考虑用于划过路径的线宽。
强调我的。ImageView与窗口大小相同(相同的矩形,因为我将其用作背景),所以我认为这不是问题所在。。。我应该能够在mouseEvent hitTest中检测到NSBezierLine吗?我正在打印被点击的所有内容的类,但我永远无法获得NSBezierPath。