如何在MouseDown或MouseDragged或MouseUp上获取选定的BezierPath?

时间:2016-05-20 06:19:04

标签: objective-c macos cocoa nsevent nsbezierpath

我正在绘制多个NSBezier路径,然后我试图在MouseDown事件上删除它们如何识别哪个bezier路径被击中? 我的bezierpath是NSObject的自定义子类。

1 个答案:

答案 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之外你还在做其他复杂的事情,那么你需要描述你正在做什么(以及为什么),并为它发布代码。