是否可以只 show/stroke UIBezierPath 的一部分?

Is it possible to show/stroke only a portion of a UIBezierPath?

我已经定义了一个 UIBezierPath 形状(由各种线段组成),但根据具体情况,我只希望它的某些部分可见。这可能吗?

我最初的思路是,当您为 UIBezierPath 设置动画时,您可以从 .fromValue.toValue 设置动画。我可以设置某种“当前值”(我看到存在,但仅作为 getOnly 属性)来在动画上下文之外完成类似的事情吗?

我想到的另一种方法是将我的路径视为一种“模板”路径,然后将其分解为各种子路径,但我希望有一种 easier/more 直接方式 (除非这个方法比我预期的要简单...)。

UIBezierPath没有那个,但是如果你把路径加到CAShapeLayer,你可以控制strokeStartstrokeEnd.

在操场上试试这个:

let path = UIBezierPath()
path.move(to: .zero)
path.addLine(to: CGPoint(x: 10, y: 10))
path.addLine(to: CGPoint(x: 20, y: 0))
path.addLine(to: CGPoint(x: 30, y: 10))
let layer = CAShapeLayer()
layer.path = path.cgPath
layer.strokeColor = UIColor.red.cgColor
layer.fillColor = UIColor.clear.cgColor

// Note these lines
layer.strokeStart = 0.2 // start at 20% of the way
layer.strokeEnd = 0.8 // end at 80% of the way

layer.lineWidth = 2
let view = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
view.layer.addSublayer(layer)

以上产生:

没有设置笔画开始和结束的两行,视图如下所示: