Я хочу сделать поворот CAShapeLayer с эффектом пружины (как в UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:)
), но на слое не на вид.Вращение анимации с эффектом пружины
Когда кнопка нажата, ее подуровень основного слоя должен вращаться до 3 * PI/4, а пружина должна отскакивать до 2 * PI/3. Затем, когда кнопка снова постучивается, вращение слоя должно выполняться в обратном порядке, чем раньше: сначала отскакивать до 2 * PI/3, а затем поворачиваться в исходное положение (перед первым вращением).
Как я мог это сделать? Я не могу достичь этого UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:)
, потому что свойство преобразования слоя по умолчанию является анимированным.
Я попытался изменить CATransaction
, но она вращается только под одним углом (не принимая во внимание другие вращение):
let rotation1 = CGAffineTransformRotate(CGAffineTransformIdentity, angle1)
let rotation2 = CGAffineTransformRotate(CGAffineTransformIdentity, angle2)
let transform = CGAffineTransformConcat(rotation1, rotation2)
CATransaction.begin()
CATransaction.setAnimationDuration(0.6)
self.plusLayer.setAffineTransform(transform)
CATransaction.commit()
Update
По Duncan C post я пытаюсь использовать CASpringAnimation
и я achive анимации в одном направлении:
myLayer.setAffineTransform(CGAffineTransformMakeRotation(angle))
let spring = CASpringAnimation(keyPath: "transform.rotation")
spring.damping = 12.0
spring.fromValue = 2.0 * CGFloat(M_PI)
spring.toValue = 3.0 * CGFloat(M_PI_4)
spring.duration = 0.5
myLayer.addAnimation(spring, forKey: "rotation")
Но как отменить эту анимацию на кнопке?
Заранее за вашу помощь.
Спасибо! Это мне очень помогло! Но у меня осталась одна проблема: как отменить эту анимацию на кнопке? – krlb
Вот один из способов: создать переменные экземпляра, которые отслеживают текущие значения и значения вращения и переключают их каждый раз, когда нажимается кнопка. –
Вы правы, это работает! Еще раз спасибо! – krlb