2016-07-31 4 views
2

스프링 효과 (예 : UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:))와 함께 CAShapeLayer를 회전시키고 싶지만보기에는 레이어가 아닌 것을 선택하고 싶습니다.스프링 효과가있는 회전 애니메이션

버튼을 두드리면 메인 레이어의 하위 레이어는 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() 

업데이트

Duncan C post에 따르면 내가 CASpringAnimation를 사용하려고 내가 애니메이션을 achive 한 방향으로 :

버튼을 누른 상태에서 애니메이션을 리버스하는 방법은 무엇입니까?

미리 도움을 주셔서 감사합니다.

답변

2

UIView 블록 애니메이션은 뷰 속성에 애니메이션을 적용하기위한 것입니다. UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:

레이어 속성을 애니메이션화해야하는 경우 Core Animation을 사용해야 할 수도 있지만 버튼의 변형 (CGAffineTransform 유형, 2D 변형)을 애니메이션으로 만들 수 있습니다.

애플은 iOS 9에서 스프링 CAAnimation을 추가 (또는 공개) 한 것 같습니다. 그러나 Xcode 문서에는없는 것 같습니다. 이 스레드 밖으로

확인 :

SpringWithDamping for CALayer animations?

+0

감사합니다! 그것은 나를 많이 도왔다! 하지만 하나의 문제가 남았습니다 : 버튼을 두드리면 그 애니메이션을 뒤집는 방법은 무엇입니까? – krlb

+0

다음과 같은 한 가지 방법이 있습니다. 현재 값과 현재 값을 추적하고 버튼을 클릭 할 때마다 전환하는 인스턴스 변수를 만듭니다. –

+0

당신 말이 맞아요, 작동합니다! 다시 감사합니다! – krlb

관련 문제