ios - 如何通过调用 cgpathcreatecopybystrokingpath 创建描边路径而不创建副本?

标签 ios objective-c core-graphics

正如标题所说,我想知道是否可以在不创建路径副本的情况下创建路径。基本上我需要这样做的原因是因为我需要一个可以使用 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() 创建路径的方法,该路径表示如果其他路径被描边(即绘制)相关绘图参数。为什么要寻找不同的方式?

需要创建一条新路径,因为该新路径与原始路径不同。路径在概念上是由“数学”直线和曲线组成的几何对象。那些直线和曲线没有宽度。线宽在概念上是绘图参数,而不是路径的属性。 (这很令人困惑,因为 UIBezierPathNSBezierPath 都有绘图相关的属性。这些只是为了方便。CGContext API 使分离更加清晰。它如果在当前上下文中设置线宽,会更一致但不太方便,就像颜色一样。)

您的代码片段中的cgpath 是一行。通过抚摸创建的路径,假设是对接或方形线帽,将是一个矩形。这是两条截然不同的道路。您必须创建第二个来测试点是否在其中。即使有一个 API 可以直接做你想做的事情,框架仍然必须在幕后计算第二条路径来回答问题。

关于ios - 如何通过调用 cgpathcreatecopybystrokingpath 创建描边路径而不创建副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23449439/

相关文章:

ios - 具有透明背景的 UIModalPresentationFormSheet?

iphone - 有没有办法在iOS模拟器上查看文件系统?

ios - 导航栏后退按钮只能使用一次

ios - 重新启动 Xcode 加载 Xcode 片段

ios - 如何添加返回或取消按钮以关闭 UIDocumentBrowser

ios - Xcode 分析器的死代码

ios - 将 NSManagedObject 属性的字符串值传递给新的 View Controller

ios - 合并两个透明图像而不丢失透明度

ios - 用于在图像上叠加文本和图形的图形库和函数

objective-c - 使用 UISlider 更改画笔大小