制作UIBezierPath的独立副本?

Bar*_*Naz 8 cocoa drawing copy objective-c uibezierpath

我有一个复杂的UIBezierCurve,我需要用一些特定的线参数绘制一次,然后再次绘制它作为与其他线参数的叠加,但我还需要曲线的最后部分比前一部分略短.

为此,我想创建曲线addLineToPoint:,moveToPoint:直到最后一部分,然后复制此曲线,并在原始曲线和复制曲线中以不同方式添加线条的最后一段.然后我抚摸原始曲线和复制曲线.

问题是它不能像我预期的那样工作.我通过以下方式创建曲线的副本:

UIBezierPath* copyCurve = [originalCurve copy];
Run Code Online (Sandbox Code Playgroud)

之后我在原始曲线中所做的绘图也应用于copyCurve,因此我不能对任何曲线进行独立绘制.

原始和副本之间的这种联系是什么原因,我怎么能摆脱它?

编辑1:我发现的解决方案是以下列方式创建副本:

UIBezierPath* copyCurve=[UIBezierPath bezierPathWithCGPath:CGPathCreateMutableCopy(originalCurve.CGPath)];
Run Code Online (Sandbox Code Playgroud)

由于这可以正常工作,可能问题在于我得到的副本的不变性

[originalCurve copy]
Run Code Online (Sandbox Code Playgroud)

jrt*_*ton 22

使用CGPath创建一个新的相同路径.

path2 = [UIBezierPath bezierPathWithCGPath:path1.CGPath];
Run Code Online (Sandbox Code Playgroud)

CGPath属性docs声明:

此属性包含任何给定时间点的路径快照.获取此属性将返回一个可传递给Core Graphics函数的不可变路径对象.

  • 您无法更改CGPath,但使用CGPath创建的UIBezierPath对象是可变的. (2认同)