如何在iOS中制作填充进度圈?

时间:2015-10-01 22:40:35

标签: ios cocoa-touch core-graphics core-animation

我需要像这样制作一个进度圈:enter image description here

我为圆圈创建了一个CAShapeLayer,并为其strokeEnd属性设置了这样的动画:

pieShape = CAShapeLayer()
pieShape.path = UIBezierPath(arcCenter: CGPointMake(29, 29), radius: 27.0, startAngle: CGFloat(startAngle), endAngle: CGFloat(endAngle), clockwise: true).CGPath
pieShape.fillColor = UIColor.clearColor().CGColor
pieShape.strokeColor = UIColor.blackColor().CGColor
pieShape.lineWidth = 4.0

self.layer.addSublayer(pieShape)


let countDownAnimation = CABasicAnimation(keyPath: "strokeEnd")
        countDownAnimation.duration = durationInSeconds
        countDownAnimation.removedOnCompletion = false
        countDownAnimation.fromValue = NSNumber(float: 0.0)
        countDownAnimation.toValue = NSNumber(float: 1.0)
        countDownAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        self.pieShape.strokeStart = 1.0
        self.pieShape.addAnimation(countDownAnimation, forKey: "drawCircleAnimation")

但是,这不是我想要的。我需要为圆形填充动画,而不仅仅是边框。谢谢。

1 个答案:

答案 0 :(得分:3)

最简单的方法是作弊,并仅为笔画设置动画,但让它看起来像是为圆圈填充动画。例如,如果您想要一个半径为30的圆,请使用radius代替15,而使用lineWidth 30,以便有效地使用笔画覆盖从中心到所需的半径30

enter image description here

使用CADisplayLink有更复杂的方法,并自行更新,但上述方法很容易达到预期的效果。