ViewController 전환을 Animate 시킬 때 생각해야 할 것 ?
Animation 을 통해 ViewController 를 전환하려는 목적을 잘 생각해보자. 많은 경우에, 전환되는 화면들의 관계성을 사용자가 잘 이해하도록 보여주기 위함이다.
예를 들어, 아이폰의 달력 앱에서 열두 달이 놓여 있을 때 특정 달을 누르면 전체 화면이 해당 달 위치로 좁혀 들어가며 해당 달의 날짜들이 확대되어 보이는 화면으로 전환된다. 이런 방식의 화면 전환은 사용자가 한 해의 전체 달 중 어떤 특정한 달의 정보를 얻기 위해 이동했다는 가시적인 이해를 제공하여 앱을 사용하는 어떤 목적과 과정에 대해 현재 어느 부분에 위치해 있다는 느낌을 줄 수 있다.
View 전환을 준비하기 위한 질문들
어떤 View 가 Animate 되어야 하는가?
어떤 Property 가 Animate 되어야 하는가?
Animation 을 위한 시작값과 종료값이 어떻게 되는가?
Animate 와 함께 View 전환하기
전환을 실행할 View Controller 에서 UIViewControllerTransitioningDelegate 를 채택한다.
ension ViewController: UIViewControllerTransitioningDelegate {
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
// 전환될 화면을 띄울 때의 Animation 동작을 정의한 객체를 반환한다.
return popUpAnimator
}
func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
// 전환된 화면을 띄운 후 다시 닫을 때의 Animation 동작을 정의한 객체를 반환한다.
return popDownAnimator
}
}
전환을 위한 Animation Class 를 정의한다.
extension PopUpAnimator: UIViewControllerAnimatedTransitioning {
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
// Animation을 지속할 시간을 반환한다.
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
// Animation 동작을 정의한다.
}
}
Presenting 과 Dismissing 이 같은 동작을 반대로 실행하는 경우 하나의 Animation Class 에서 화면을 띄우는지 닫는지 확인하는 Bool 타입 flag 변수를 두고 이 변수의 상태에 따라 삼항 연산자로 전환을 설정하면 편하다.
'iOS 개발 > UIKit' 카테고리의 다른 글
[iOS/UIKit] UIKit 개발 방법들 (Storyboard, NIBs, Programmatic) (0) | 2021.09.05 |
---|---|
[iOS/UIKit] Keyframe Animation 으로 연속적인 변화를 Animate 하기 (0) | 2021.04.08 |
[iOS/UIKit] Fade 효과로 Transform Animation 구현하기 (0) | 2021.04.02 |
[iOS/UIKit] Fade 효과로 화면 전환하기 (0) | 2021.04.01 |