单击NSBezierPath

时间:2013-09-01 04:55:47

标签: macos cocoa nsview nsbezierpath

我正在NSImageView上绘制NSBezierPath行。我正在创建NSBezierPath对象,设置moveToPoint,设置lineToPoint,设置setLineWidth:,然后在drawRect我的NSImageView子类中调用[myNSBezierPath stroke] containsPoint: 1}}。这一切都像我想要的那样工作,但我似乎无法使用if([myNSBezierPath containsPoint:[theEvent locationInWindow]]{ //do something } 方法...我尝试实现

-(void)mouseUp:(NSEvent*)theEvent

在我的NSImageView子类的{{1}}中,但它从未作出反应,我确信我正在打那条线...我做错了什么?我只需要检测是否点击了NSBezierPath。

干杯。

1 个答案:

答案 0 :(得分:1)

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

另外,来自containsPoint:文档:

  

此方法检查路径本身及其区域的点   封闭。在确定封闭区域中的命中时,此方法使用   非零缠绕规则(NSNonZeroWindingRule)。 不需要   考虑用于描绘路径的线宽。

强调我的。