Home > Mobile >  Swift: How to set CAShapeLayer() progress value
Swift: How to set CAShapeLayer() progress value

Time:11-05

I just create an IOS app where I implement a round progress bar with CAShapeLayer(). And know I want to set in each second the progress value to 1 is this posible? I would just like to create a progress bar like this one that leaps forward a value every second: Like this

Best Regards!

CodePudding user response:

CAShapeLayer has animatable strokeStart and strokeEnd properties. You can directly set these and they will be animated automatically, or you can control the animation yourself like any other animatable CALayer property:

let animation = CABasicAnimation(keyPath: "strokeEnd")
animation.fromValue = 0
animation.toValue = 1
animation.duration = 1
shape.add(animation, forKey: nil)

This will fill the progress indicator in 1 second.

For a stroke end animation to work, you can't use a CGPath which is just a circle - you need an arc with a start and an end, like this:

let path = CGMutablePath()
path.addArc(
    center: CGPoint(x: 150, y: 150),
    radius: 100,
    startAngle: -0.5 * .pi,
    endAngle: 1.5 * .pi,
    clockwise: false
)
  • Related