我有一个复杂的UIBezierCurve,我需要用一些特定的线参数绘制一次,然后再次绘制它作为与其他线参数的叠加,但我还需要曲线的最后部分比前一个略短
要执行此操作,我希望按addLineToPoint:
创建曲线,moveToPoint:
直到最后一部分,然后制作此曲线的副本,并以原始和复制的方式添加不同行的最后一段曲线。然后我抚摸原始曲线和复制曲线。
问题是它不能像我预期的那样工作。 我通过以下方式创建曲线的副本:
UIBezierPath* copyCurve = [originalCurve copy];
之后我在originalCurve中所做的绘图也应用于copyCurve,所以我无法对任何曲线进行独立绘制。
原始版本和副本之间存在这种联系的原因是什么?如何摆脱它?
编辑1: 我发现的解决方案是以下列方式创建副本:
UIBezierPath* copyCurve=[UIBezierPath bezierPathWithCGPath:CGPathCreateMutableCopy(originalCurve.CGPath)];
由于这种方法正常,可能问题在于我用
复制的副本的不变性[originalCurve copy]
答案 0 :(得分:21)
使用CGPath创建一个新的相同路径。
path2 = [UIBezierPath bezierPathWithCGPath:path1.CGPath];
CGPath属性docs声明:
此属性包含任何给定时间点的路径快照。获取此属性将返回一个可传递给Core Graphics函数的不可变路径对象。
答案 1 :(得分:2)
除了@jrturton回答: -
或者我们可以使用: -
let path = UIBezierPath(ovalIn: pathRect)
let newPath = path.cgPath.copy(strokingWithWidth: strokeWidth, lineCap: .butt, lineJoin: .miter, miterLimit: 0)
答案 2 :(得分:0)
|
从Swift 4开始对我来说很好用。
sed
copy()
未被修改。