我正在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。
干杯。
答案 0 :(得分:1)
确保将鼠标单击位置转换为图像视图子类的坐标系,而不是转换到其中一个窗口(除非它们相同)。你的bezier路径并不知道它所吸收的偏移量,因此你必须在执行命中测试时考虑到这一点。
另外,来自containsPoint:
文档:
此方法检查路径本身及其区域的点 封闭。在确定封闭区域中的命中时,此方法使用 非零缠绕规则(NSNonZeroWindingRule)。 不需要 考虑用于描绘路径的线宽。
强调我的。