正如标题所说,我想知道是否可以在不创建路径副本的情况下创建路径。基本上我需要这样做的原因是因为我需要一个可以使用 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。这是一个严重的错误”我是否遗漏了什么?
谢谢。
最佳答案
你不能。 CGPathCreateCopyByStrokingPath()
是创建路径的方法,该路径表示如果其他路径被描边(即绘制)相关绘图参数。为什么要寻找不同的方式?
需要创建一条新路径,因为该新路径与原始路径不同。路径在概念上是由“数学”直线和曲线组成的几何对象。那些直线和曲线没有宽度。线宽在概念上是绘图参数,而不是路径的属性。 (这很令人困惑,因为 UIBezierPath
和 NSBezierPath
都有绘图相关的属性。这些只是为了方便。CGContext
API 使分离更加清晰。它如果在当前上下文中设置线宽,会更一致但不太方便,就像颜色一样。)
您的代码片段中的cgpath
是一行。通过抚摸创建的路径,假设是对接或方形线帽,将是一个矩形。这是两条截然不同的道路。您必须创建第二个来测试点是否在其中。即使有一个 API 可以直接做你想做的事情,框架仍然必须在幕后计算第二条路径来回答问题。
关于ios - 如何通过调用 cgpathcreatecopybystrokingpath 创建描边路径而不创建副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23449439/