TIL 35: 다양한 애니메이션 구현 방식

TL;DR

  • Core Animation: Raw 레벨 구현 방식
  • UIView의 애니메이션 메소드: 구현하기 간편한 방식
  • UIViewPropertyAnimator: 복잡한 애니메이션과 애니메이션 동작 제어가 가능한 방식

기존에 사용하던 뷰 애니메이션 구현 방식

앱에 있어 애니메이션은 필수 불가결한 요소이다. 앱에서 화면 이동과 같은 트랜지션에 애니메이션이 꼭 들어가야 사용자가 한 번에 이해할 수 있는 UX를 제공할 수 있다. 그 밖에도 적절한 애니메이션을 제공하면, 앱의 퀄리티가 높아 보이게 만드는 효과가 있다.

그래서 줄곧 애니메이션을 많이 넣어 왔지만, 항상 사용하던 방법은 UIView.animate() 메소드를 이용하는 것이었다. 그동안 엄청 복잡한 애니메이션이 없었고, 어느 정도 복잡한 것도 위 메소드를 이용하면 충분히 가능했었다.

그러다 사내 프로젝트에서 UIView의 메소드가 아닌 다른 구현 방식이 필요할 것 같아서 조사를 했는데, iOS 10부터 등장한 UIViewPropertyAnimator라는 클래스가 눈에 띄었다. 결론적으로 해당 클래스를 쓸 필요가 없어 다시 UIView.animate() 메소드로 해결을 했지만, 그 정체가 궁금해 더 조사를 해서 간단하게 분류를 해보았다.

용도에 따른 애니메이션 구현 방식

iOS에서는 모든 애니메이션을 Core Animation을 이용한다. UIView.animate() 메소드나 UIViewPropertyAnimator 클래스 등은 Core Animation의 편의용 버전인 것이다.

각 애니메이션 구현 방식을 간단히 용도에 따라 구분한다면 다음과 같다.

  • Core Animation
    • 가장 Raw한 애니메이션 방식이므로 다양한 조작이 가능하다.
    • 코드 작성이 까다롭거나 불편하다.
  • UIView의 애니메이션 메소드
    • 뷰 애니메이션을 처리하는 것이 간편하다.
    • 일부 제약이 있을 수 있다.
  • UIViewPropertyAnimator
    • 복잡한 뷰 애니메이션을 처리할 수 있으며 시작, 정지, 진행도 반영 등 동작도 제어가 가능하다.
    • 일부 제약이 있을 수 있다.

위와 같은 특징때문에

  1. 평소에는 UIView의 애니메이션 메소드를 사용하다가
  2. 추가로 동작 제어가 필요하면 UIViewPropertyAnimator를 사용하고
  3. 그것으로도 안되는 애니메이션은 최후의 수단으로 Core Animation 관련 메소드로 Raw 레벨에서 애니메이션을 정의하면 된다. 😎
TIL 36: 이직 후기 TIL 34: 전체 화면 기준으로 현재 뷰의 프레임 얻기