【问题标题】:How to make a filling progress circle in iOS?如何在iOS中制作一个填充进度圈?
【发布时间】:2015-12-30 02:50:00
【问题描述】:

我需要做一个这样的进度圈:

我为圆创建了一个 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")

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

【问题讨论】:

  • 我不确定您的 strokeStart1.0。我会不理它的。此外,您的 NSNumber 实例化是不必要的(例如,您可以使用 0.0 而不是 NSNumber(float: 0.0)),因为 Swift 似乎会自动为您创建 NSNumber 对象...

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


【解决方案1】:

最简单的方法是作弊,只为笔划设置动画,但让它看起来像是在为圆圈的填充设置动画。例如,如果您想要一个半径为30 的圆,请改用15radius,但使用30lineWidth,这样笔画就可以有效地从中心覆盖到所需的@ 半径987654328@。

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

【讨论】:

  • 聪明!我很惊讶笔画能正确处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
相关资源
最近更新 更多