是否可以只 show/stroke UIBezierPath 的一部分?
Is it possible to show/stroke only a portion of a UIBezierPath?
我已经定义了一个 UIBezierPath 形状(由各种线段组成),但根据具体情况,我只希望它的某些部分可见。这可能吗?
我最初的思路是,当您为 UIBezierPath 设置动画时,您可以从 .fromValue
到 .toValue
设置动画。我可以设置某种“当前值”(我看到存在,但仅作为 getOnly 属性)来在动画上下文之外完成类似的事情吗?
我想到的另一种方法是将我的路径视为一种“模板”路径,然后将其分解为各种子路径,但我希望有一种 easier/more 直接方式 (除非这个方法比我预期的要简单...)。
UIBezierPath
没有那个,但是如果你把路径加到CAShapeLayer
,你可以控制strokeStart
和strokeEnd
.
在操场上试试这个:
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)
以上产生:
没有设置笔画开始和结束的两行,视图如下所示:
我已经定义了一个 UIBezierPath 形状(由各种线段组成),但根据具体情况,我只希望它的某些部分可见。这可能吗?
我最初的思路是,当您为 UIBezierPath 设置动画时,您可以从 .fromValue
到 .toValue
设置动画。我可以设置某种“当前值”(我看到存在,但仅作为 getOnly 属性)来在动画上下文之外完成类似的事情吗?
我想到的另一种方法是将我的路径视为一种“模板”路径,然后将其分解为各种子路径,但我希望有一种 easier/more 直接方式 (除非这个方法比我预期的要简单...)。
UIBezierPath
没有那个,但是如果你把路径加到CAShapeLayer
,你可以控制strokeStart
和strokeEnd
.
在操场上试试这个:
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)
以上产生:
没有设置笔画开始和结束的两行,视图如下所示: