我正在NSImageView上绘制一条NSBezierPath线。我正在创建NSBezierPath对象,设置moveToPoint
、lineToPoint
、setLineWidth:
,然后在我的NSImageView
子类的drawRect
中调用[myNSBezierPath stroke]
。这一切都如我所愿,但我似乎无法使用containsPoint:
方法。。。我试着实现
if([myNSBezierPath containsPoint:[theEvent locationInWindow]]{
//do something
}
在我的NSImageView子类的-(void)mouseUp:(NSEvent*)theEvent
中,但它从来没有反应,我确信我正在达到这一行。。。我做错什么了吗?我只需要检测NSBezierPath是否被点击。
干杯。
确保将鼠标单击位置转换到图像视图子类的坐标系中,而不是转换到窗口中的坐标系(除非它们相同)。你的bezier路径不知道它被绘制到的偏移量,所以在进行命中测试时必须考虑到这一点。
此外,来自containsPoint:
文档:
此方法根据路径本身及其所在区域检查点封闭。在确定封闭区域中的命中率时,此方法使用非零绕组规则(NSNonZeroWindingRule)不需要考虑到用于绘制路径的线宽
强调我的。