动画 UIProgressview 颜色变化

Animate UIProgressview Color Change

我有一个 UIProgressView,我想随着进度的增加更改颜色。例如,如果进度低于 40%,则 progressTintColor 应变为红色,如果高于 40%,则应变为蓝色。

这是我试过的方法

if value <= 40 {
    UIView.animate(withDuration: 5) {
        self.taskProgressView.progressTintColor = .red
    }
} else {
    UIView.animate(withDuration: 5) {
        self.taskProgressView.progressTintColor = .blue
    } 
}

现在,颜色从红色变为蓝色,反之亦然,但是,它不会在 5 秒的持续时间内为颜色变化设置动画。

我怎样才能做到这一点?

这可以使用 CAShapeLayers 轻松完成。

你需要三层:

  • CAShapeLayer(用于轨道)
  • CAShapeLayer(用于进度)
  • CAGradientLayer(颜色效果)。

您需要将渐变图层设置为轨道图层的遮罩。

更改值时,您可以使用 CABasicAnimation 来设置进度更改的动画(您应该简单地设置 strokeEnd 属性 的动画)。