我正在绘制多个NSBezier路径,然后我试图在MouseDown事件上删除它们如何识别哪个bezier路径被击中? 我的bezierpath是NSObject的自定义子类。
答案 0 :(得分:0)
好吧,使用NSEvent
方法从mouseDown:
方法的-locationInWindow
获取鼠标点击点,将点击点从窗口坐标转换为视图坐标-convertPoint:fromView:
,循环浏览您正在绘制的NSBezierPath
对象,从上到下,并调用-containsPoint:
来测试每条路径上的匹配。如果你的bezier路径是封闭的,填充的路径,这种方法很有效。如果它们是未闭合或描边路径,则需要下拉一个级别并使用CGPathCreateCopyByStrokingPath()
,也可能使用CGPathCreateCopyByDashingPath()
,以获得描述区域轮廓的填充式贝塞尔曲线路径。抚摸原始路径时填写(参见How to get the path Quartz is using to stroke a NSBezierPath)。
但是,我不确定你的意思是“我的bezierpath是NSObject的自定义子类”;如果除了使用NSBezierPath
之外你还在做其他复杂的事情,那么你需要描述你正在做什么(以及为什么),并为它发布代码。