我对 containsPoint 方法有疑问。我画了一些盒子和盒子之间的连接器。连接器基本上是一条曲线,基于单个 curveToPoint:controlPoint1:controlPoint2 调用。当我现在尝试用鼠标选择这条曲线/路径时,这很难做到。containsPoint: 方法似乎非常敏感。我试图把线画得更大(setLineWidth:),但这似乎没有帮助。
有什么想法我需要做不同的事情吗?
我对 containsPoint 方法有疑问。我画了一些盒子和盒子之间的连接器。连接器基本上是一条曲线,基于单个 curveToPoint:controlPoint1:controlPoint2 调用。当我现在尝试用鼠标选择这条曲线/路径时,这很难做到。containsPoint: 方法似乎非常敏感。我试图把线画得更大(setLineWidth:),但这似乎没有帮助。
有什么想法我需要做不同的事情吗?
对于 CGPath,您始终可以使用以下方法创建一个封闭路径,它是描边路径的轮廓:
CGPathRef strokedPath = CGPathCreateCopyByStrokingPath(
path, // your original CGPathRef
NULL, // don't transform
10.0, // lineWidth
kCGLineCapButt, // lineCap (default value)
kCGLineJoinMiter, // lineJoin (default value)
0.0 // miterLimit
);
您可以在此处(由 Ole Begemann 撰写)和此处(由 Rob Napier撰写)阅读有关路径命中测试的更多信息。
感谢大卫的回答,我现在可以提供完整的答案。我需要的是三个部分。
+(NSBezierPath) bezierPathWithCGPath:
函数结果看起来像这样。
//con as Connector was the starting point
CGPathRef tapTargetPath = CGPathCreateCopyByStrokingPath(con.CGPath, NULL, 4, kCGLineCapButt, kCGLineJoinBevel, kCGLineJoinMiter );
NSBezierPath * hitPath = [NSBezierPath bezierPathWithCGPath:tapTargetPath];