我正在绘制多个 NSBezierpath,然后我正在尝试擦除它们,以便在鼠标按下事件中如何识别哪个贝塞尔路径被击中?我的bezierpath是NSObject的自定义子类。
好吧,使用-locationInWindow
从mouseDown:
方法中的NSEvent
获取鼠标单击点,使用-convertPoint:fromView:
将窗口坐标的单击点转换为视图坐标,从上到下循环遍历正在绘制的NSBezierPath
对象,并调用-containsPoint:
以测试每条路径上的命中。 如果您的贝塞尔路径是封闭的、填充的路径,这很有效。 如果它们是未闭合或描边路径,则需要下拉一个级别并使用 CGPathCreateCopyByStrokingPath()
,也许还有CGPathCreateCopyByDashingPath()
,来获取填充样式的贝塞尔路径,该路径描述了在描边原始路径时填充的区域的轮廓(请参阅如何获取 Quartz 用于描边 NSBezierPath 的路径)。
但是,我不确定你所说的"我的bezierpath是NSObject的自定义子类"是什么意思;如果你正在做其他复杂的事情,而不仅仅是使用NSBezierPath
,那么你将需要描述你在做什么(以及为什么),并为此发布代码。