세 가지 색 그라디언트 을 천천히에 적용하고 싶습니다.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
배열에 몇 백 가지 색상을 추가해야 순환 할만큼 충분합니까?
감사
그냥 a.duration = 0.1을 느리게 변경하려고하지 않습니까? – rambossa
'duration'을 더 작게 설정하면 애니메이션이 더 빨리 진행됩니다. 더 커지고 유동적 인 애니메이션은 없습니다. 그것은 점프와 같고 애니메이션이 아닙니다. – Joseph
'UIColor'''red'''''''''''''''''''blue'' 메소드를 사용하여 애니메이션 블록 내에서 값을 변경할 수 있습니다. 그러나 당신은 당신의 3 원색을 덮는 방식으로'RGB'의 조합을하는 알고리즘을 생각해 낼 필요가 있습니다. –