我想動畫一個三色漸變緩慢。放慢CAGradientLayer動畫
我有一個自定義UIView
像這樣:
class MyView: UIView, CAAnimationDelegate {
lazy var gradientLayer: CAGradientLayer = {
let l = CAGradientLayer()
l.frame = self.frame
l.colors = self.colors
l.startPoint = CGPoint(x: 0, y: 0)
l.endPoint = CGPoint(x: 1, y: 0)
l.mask = self.textLayer
return l
}()
lazy var textLayer: CATextLayer = {
let l = CATextLayer()
l.frame = self.frame
l.string = "test".uppercased()
l.fontSize = 23
return l
}()
var colors: [CGColor] = [
UIColor.red.cgColor,
UIColor.purple.cgColor,
UIColor.blue.cgColor
]
init() {
...
self.layer.addSublayer(gradientLayer)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func animate() {
var newColors = colors
let lastColor: CGColor = newColors.last!
newColors.removeLast()
newColors.insert(lastColor, at: 0)
colors: newColors
gradientLayer.colors = newColors
let a = CABasicAnimation(keyPath:"colors")
a.toValue = newColors
a.duration = 0.1
a.isRemovedOnCompletion = true
a.fillMode = kCAFillModeForwards
a.delegate = self
gradientLayer.add(a, forKey:"animateGradient")
}
func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
animate()
}
}
這工作,但速度非常快。我怎樣才能減慢動畫,而不會變得塊狀? 我是否必須爲colors
陣列添加幾百種顏色才能使其足以循環使用?
感謝
wouldnt它只是改變a.duration = 0.1到更慢的東西? – rambossa
使'duration'較小會導致動畫變得更快。使其變大並且您沒有流體動畫。它更像是一個跳躍,而不是動畫。 – Joseph
您可以使用'UIColor''紅色''綠色''藍色''alpha'方法並在您的動畫塊中更改它們的值。但是你需要想出一個算法,它能夠以覆蓋你的三原色的方式完成RGB的組合。 –