正如标题所说,我想知道是否可以在不创建路径的情况下创建路径。基本上我为什么需要这样做是因为我需要一个可以使用CGpathcontainspoint的路径。
CGPathMoveToPoint(cgpath, NULL, lastPoint.x, lastPoint.y);
CGPathAddLineToPoint(cgpath, NULL, newPoint.x, newPoint.y);
UIBezierPath *tmppath = [UIBezierPath bezierPathWithCGPath:cgpath];
tmppath.lineWidth = 6;
[[UIColor blackColor] setStroke];
[tmppath stroke];
self.containspoint = [tmppath containsPoint:imaginarynewpos1];
这让我得到错误消息:" CGContextAddPath:无效的上下文0x0。这是一个严重的错误"有什么我想念的吗?
感谢。
答案 0 :(得分:2)
你做不到。 CGPathCreateCopyByStrokingPath()
是 创建路径的方式,该路径表示如果使用相关绘图参数描边(即绘制)其他路径,将绘制的内容。你为什么要寻找不同的方式?
需要创建新路径,因为新路径是与原始路径不同的路径。路径在概念上是由“数学”线和曲线组成的几何对象。那些线条和曲线没有宽度。线宽在概念上是绘图参数,而不是路径的属性。 (这是令人困惑的,因为UIBezierPath
和NSBezierPath
都有绘图相关的属性。这只是一个方便。CGContext
API使分离更清晰。如果行更加一致但不太方便width是在当前上下文中设置的,就像颜色一样。)
您的代码段中的cgpath
是一行。假设对接或方形线帽,通过抚摸它创建的路径将是一个矩形。这是两条截然不同的道路。你必须创建第二个来测试一个点是否在其中。即使有一个API可以直接执行您想要的操作,框架仍然需要计算幕后的第二条路径来回答问题。