2016-07-31 7 views
2

Я хочу сделать поворот 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") 

Но как отменить эту анимацию на кнопке?

Заранее за вашу помощь.

ответ

2

анимация блока UIView предназначена для анимации свойств вида. Вы можете анимировать преобразование кнопки (типа CGAffineTransform, 2D-преобразование), используя UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:

Если вам нужно анимировать свойства слоя, вам нужно использовать Core Animation.

Кажется, Apple добавила (или обнародовала) весну CAAnimation в iOS 9. Однако она, похоже, не содержится в документах Xcode.

Заканчивать эту тему:

SpringWithDamping for CALayer animations?

+0

Спасибо! Это мне очень помогло! Но у меня осталась одна проблема: как отменить эту анимацию на кнопке? – krlb

+0

Вот один из способов: создать переменные экземпляра, которые отслеживают текущие значения и значения вращения и переключают их каждый раз, когда нажимается кнопка. –

+0

Вы правы, это работает! Еще раз спасибо! – krlb

Смежные вопросы