0

我在我的 NSImageView 上画了一条 NSBezierPath 线。我正在创建 NSBezierPath 对象、设置moveToPoint、设置lineToPoint、设置setLineWidth:,然后在drawRectNSImageView调用的子类中创建[myNSBezierPath stroke]。这一切都像我想要的那样工作,但我似乎无法使用containsPoint:方法......我尝试实现

if([myNSBezierPath containsPoint:[theEvent locationInWindow]]{
   //do something
}

-(void)mouseUp:(NSEvent*)theEvent我的 NSImageView 子类中,但它从来没有反应,我确定我正在触及那条线......我做错了什么吗?我只需要检测 NSBezierPath 是否被点击。

干杯。

4

1 回答 1

1

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

另外,从containsPoint:文档中:

此方法根据路径本身及其包围的区域检查该点。在确定封闭区域中的命中时,此方法使用非零缠绕规则 (NSNonZeroWindingRule)。它没有考虑用于描边路径的线宽。

强调我的。

于 2013-09-01T05:53:25.683 回答