-
[CoreAnimation] Ch9. Animation Keys and Delegates (레이어 애니메이션 Delegate, Key를 사용하기)Ray Wenderlich/Core Animation 2018. 8. 1. 20:58
9장 Animation Keys and Delegates
Intro
UIView animation을 사용할 때, 애니메이션을 중지할 수 없었다.
하지만 Core Animation에선 모든게 가능!
layer의 애니메이션은 멈출 수 있다. 더불어 delegate를 설정하여 애니메이션의 시작과 끝(or interrupted)에 대한 핸들링도 가능하다.
Introducing animation delegates
CAAnimationDelegate에는 두 메소드가 있다.
func animationDidStart(_ anim: CAAnimation)
func animationDidStop(_ anim: CAAnimation, finished flag: Bool)
Key-value coding compliance
CAAnimation은 Objective-C로 작성되어 key-value coding을 지원한다.
-> 런타임에 애니메이션 객체에 원하는 프로퍼티를 추가가능
그러면 animationDidStop메소드에서 처리하길 원하는 애니메이션을 판별할 수 있게 된다.
Switching on key values
func animationDidStop(_ anim: CAAnimation, finished flag: Bool)
anim으로 전달된 애니메이션에서 key에 해당하는 value를 검사하여 원하는 애니메이션 찾아내기
이 방법은 종료된 애니메이션에만 사용할 수 있었다. 하지만 진행중인 애니메이션을 핸들링하고 싶다면??
Animation Keys
layer에 애니메이션을 추가할 때 사용했던 메소드. add(_:key:)에서 key를 항상 nil로 설정했다. 이제 이 key를 써보자! key는 애니메이션 객체의 식별자 역할을 한다. key를 통해 원하는 애니메이션을 식별할 수 있는 것이다.
Adding a second layer animation
하나의 layer에 여러개의 애니메이션을 동시에 적용시킬 수 있다.
각각의 애니메이션이 독립적으로 작동하고, duration이 같을 필요도 없다.
이를 쉽게 하는 group animation은 다음 챕터에서 배우도록 하자.
Identifying running animations
애니메이션이 진행중일 때, 우리는 layer의 animationKeys()를 통해 애니메이션의 key값을 알 수 있다. 애니메이션을 식별해냈으니, 애니메이션을 삭제해보도록 하자. removeAllAnimations()를 호출하면 모든 애니메이션이 삭제되고, 알아낸 키 값을 통해 removeAnimation(forKey:)를 호출하면 특정 애니메이션만 삭제할 수 있다. 이 때, 키 값을 통해 얻은 애니메이션 객체는 immutable하다.
Challenge
구름애니메이션을 Core Animation의 key-value coding을 사용하여 구현해보기.
'Ray Wenderlich > Core Animation' 카테고리의 다른 글