我有一个复杂的 UIBezierCurve,我需要用一些特定的线参数绘制一次,然后再次绘制它作为与其他线参数的叠加,但我还需要曲线的最后一部分比之前的曲线略短.
为此,我想通过 addLineToPoint:
创建曲线,moveToPoint:
直到最后一部分,然后复制这条曲线并添加最后的线段原始曲线和复制曲线中直线的不同。然后我对原始曲线和复制的曲线进行描边。
问题是它没有像我预期的那样工作。 我通过以下方式创建曲线的副本:
UIBezierPath* copyCurve = [originalCurve copy];
之后我在 originalCurve 中所做的绘图也应用于 copyCurve,因此我无法对任何这些曲线进行独立绘图。
原件和副本之间存在这种联系的原因是什么?我该如何摆脱这种联系?
编辑 1: 我找到的一个解决方案是以下列方式创建副本:
UIBezierPath* copyCurve=[UIBezierPath bezierPathWithCGPath:CGPathCreateMutableCopy(originalCurve.CGPath)];
既然这个工作正常,也许问题出在我得到的副本的不变性上
[originalCurve copy]
最佳答案
使用 CGPath 创建一个新的相同路径。
path2 = [UIBezierPath bezierPathWithCGPath:path1.CGPath];
CGPath 属性文档声明:
This property contains a snapshot of the path at any given point in time. Getting this property returns an immutable path object that you can pass to Core Graphics functions.
关于objective-c - 制作 UIBezierPath 的独立副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11472174/