Anonymous
CABasicAnimation не работает с CAGradientLayer
Сообщение
Anonymous » 21 май 2024, 16:57
Я пытаюсь создать эффект мерцания для UIButton, поэтому я создал подкласс и попытался запустить анимацию, но ничего не происходит. Я вижу градиент на кнопке, но он не анимируется. Что я делаю не так?
Вот как это выглядит:
[img]https:/ /i.sstatic.net/5JoOI.png[/img]
Вот мой код:
Код: Выделить всё
class ShimmerButton: UIButton {
private var gradientColorOne : CGColor = UIColor(white: 0.85, alpha: 0.0).cgColor
private var gradientColorTwo : CGColor = UIColor(white: 0.95, alpha: 0.5).cgColor
func addGradientLayer() -> CAGradientLayer {
let gradientLayer = CAGradientLayer()
gradientLayer.frame = self.bounds
gradientLayer.startPoint = CGPoint(x: 0.0, y: 1.0)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 1.0)
gradientLayer.colors = [self.gradientColorOne, self.gradientColorTwo, self.gradientColorOne]
gradientLayer.locations = [0.0, 0.5, 1.0]
let top = self.layer.sublayers?.last
self.layer.insertSublayer(gradientLayer, above: top)
return gradientLayer
}
func addAnimation(duration: Double, repeatCount: Float) -> CABasicAnimation {
let animation = CABasicAnimation(keyPath: "locations")
animation.fromValue = [-1.0, -0.5, 0.0]
animation.toValue = [1.0, 1.5, 2.0]
animation.repeatCount = repeatCount
animation.duration = duration
return animation
}
func startAnimating(duration: Double, repeatCount: Float) {
let gradientLayer = self.addGradientLayer()
let animation = self.addAnimation(duration: duration, repeatCount: repeatCount)
gradientLayer.add(animation, forKey: "anim")
}
}
Запуск анимации:
Код: Выделить всё
self.button.startAnimating(duration: 0.9, repeatCount: .infinity)
Пример кода взят отсюда.
Подробнее здесь:
https://stackoverflow.com/questions/679 ... dientlayer
1716299840
Anonymous
Я пытаюсь создать эффект мерцания для UIButton, поэтому я создал подкласс и попытался запустить анимацию, но ничего не происходит. Я вижу градиент на кнопке, но он не анимируется. Что я делаю не так? Вот как это выглядит: [img]https:/ /i.sstatic.net/5JoOI.png[/img] Вот мой код: [code]class ShimmerButton: UIButton { private var gradientColorOne : CGColor = UIColor(white: 0.85, alpha: 0.0).cgColor private var gradientColorTwo : CGColor = UIColor(white: 0.95, alpha: 0.5).cgColor func addGradientLayer() -> CAGradientLayer { let gradientLayer = CAGradientLayer() gradientLayer.frame = self.bounds gradientLayer.startPoint = CGPoint(x: 0.0, y: 1.0) gradientLayer.endPoint = CGPoint(x: 1.0, y: 1.0) gradientLayer.colors = [self.gradientColorOne, self.gradientColorTwo, self.gradientColorOne] gradientLayer.locations = [0.0, 0.5, 1.0] let top = self.layer.sublayers?.last self.layer.insertSublayer(gradientLayer, above: top) return gradientLayer } func addAnimation(duration: Double, repeatCount: Float) -> CABasicAnimation { let animation = CABasicAnimation(keyPath: "locations") animation.fromValue = [-1.0, -0.5, 0.0] animation.toValue = [1.0, 1.5, 2.0] animation.repeatCount = repeatCount animation.duration = duration return animation } func startAnimating(duration: Double, repeatCount: Float) { let gradientLayer = self.addGradientLayer() let animation = self.addAnimation(duration: duration, repeatCount: repeatCount) gradientLayer.add(animation, forKey: "anim") } } [/code] Запуск анимации: [code]self.button.startAnimating(duration: 0.9, repeatCount: .infinity) [/code] Пример кода взят отсюда. Подробнее здесь: [url]https://stackoverflow.com/questions/67956052/cabasicanimation-not-working-on-cagradientlayer[/url]