https://developer.apple.com/documentation/uikit/uiviewanimating
"An interface for implementing custom animator objects."
커스텀 애니메이터 객체를 구현하는 인터페이스입니다.
protocol UIViewAnimating
UIViewAnimating
프로토콜은 애니메이션의 시작, 정지, 일시정지와 같은 기능을 포함해 애니메이션을 위한 기본적인 플로우 컨트롤 구현 메소드를 정의합니다. 또한, 애니메이션의 현재 상태를 반영하거나 애니메이션 과정에서 현재 상태를 수정하기 위한 몇 가지 속성이 있습니다.
보통 UIViewPropertyAnimator
객체에 연관된 애니메이션을 다루기 위해서 이 메소드를 사용하게 될 것입니다. 구체적으로 애니메이션의 시작과 정지, 애니메이션 역전, 애니메이션의 컴플리션 과정을 변화하기 위해 메소드들을 사용하게 될 것입니다. 상호작용하는 애니메이션을 구현하기 위해 이 기능들을 사용할 수도 있습니다. 커스텀 애니메이터 객체를 구현하기 위해 이 프로토콜을 채택할 수도 있습니다.
애니메이터 객체들은 애니메이션 집합이 진행되는 동안 상태의 집합을 통해 움직입니다. 이와 같은 상태들은 변화를 어떻게 다룰지에 대한 내용을 포함해, 애니메이터의 움직임을 결정합니다. 고유한 애니메이터를 구현할 때, 상태 전환을 지키면서 구현해야 하며, 업데이트된 상태 속성을 정확하게 유지해야 합니다. Figure 1은 상태들과 상태의 전환이 발생하는 것을 보여줍니다.
Figure 1 State transitions for an animator object
비활성 상태(Inactive)는 애니메이터의 초기 상태입니다. 새로 생성된 모든 에니메이터의 시작은 비활성 상태입니다. 유사하게 애니메이션이 마무리된 애니메이터는 비활성 상태를 반환합니다. 구체화하고자 하는 전체 듀레이션에서 수행하길 원하는 애니메이션을 설정할 수 있습니다.
startAnimation()
혹은 pauseAnimation()
메소드를 호출할 때, 애니메이터는 활성 상태로 이동합니다. 이 상태의 에니메이터는 애니메이션이 작동하고 있거나 일시정지된 상태이고, 애니메이션을 수정할 수 있습니다. 현재 애니메이션이 의도한대로 작동하고 완료될 때, 애니메이터는 비활성 상태를 반환합니다. 그리고 새로운 애니메이션 집합을 다시 설정할 수 있습니다.
stopAnimation(_:)
메소드를 호출하면 모든 애니메이션을 멈추고 해당 뷰의 속성은 현재 진행중인 값으로 업데이트됩니다. 이 메소드를 호출한 후, 애니메이터 객체는 정지 혹은 비활성 상태로 이동하고, 다시 사용되기 전까지 재설정되어야 합니다.