[swift] 모달과 네비게이션 뷰의 전환 애니메이션을 사용자 정의하는 방법은?

iOS 애플리케이션을 개발할 때, 기본적으로 제공되는 전환 애니메이션을 커스터마이즈하고 싶을 때가 있습니다. 모달(modal) 및 네비게이션(navigation) 뷰의 전환 애니메이션을 사용자 정의하는 방법에 대해 알아보겠습니다.

모달 뷰의 전환 애니메이션

iOS에서 모달로 화면을 표시할 때, 화면이 아래에서 위로 올라오는 기본 전환 애니메이션이 적용됩니다. 사용자 정의 전환 애니메이션을 구현하기 위해 UIViewControllerTransitioningDelegate 프로토콜을 채택하고 커스텀 전환 애니메이션을 제공하는 클래스를 구현해야 합니다.

다음은 모달 뷰의 전환 애니메이션을 사용자 정의하는 예시 코드입니다.

class CustomModalTransition: NSObject, UIViewControllerTransitioningDelegate, UIViewControllerAnimatedTransitioning {
    
    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return self
    }
    
    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return self
    }
    
    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 0.5
    }
    
    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        // 전환 애니메이션 구현
    }
}

네비게이션 뷰의 전환 애니메이션

네비게이션 컨트롤러를 사용하여 화면을 전환할 때의 기본 애니메이션 역시 사용자가 원하는 형태로 변경할 수 있습니다. 이를 위해서는 UINavigationControllerDelegate 프로토콜을 채택하고, 사용자 정의 전환 애니메이션을 제공하는 클래스를 구현해야 합니다.

다음은 네비게이션 뷰의 전환 애니메이션을 사용자 정의하는 예시 코드입니다.

class CustomNavigationTransition: NSObject, UINavigationControllerDelegate {
    
    func navigationController(_ navigationController: UINavigationController, 
                              animationControllerFor operation: UINavigationControllerOperation, 
                              from fromVC: UIViewController, 
                              to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        // 전환 애니메이션 반환
        return CustomNavigationAnimator()
    }
}

class CustomNavigationAnimator: NSObject, UIViewControllerAnimatedTransitioning {
    
    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 0.5
    }
    
    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        // 전환 애니메이션 구현
    }
}

커스텀 모달 및 네비게이션 전환 애니메이션 클래스를 구현하고 해당 애니메이션을 반환하는 데 필요한 메서드를 구현함으로써, iOS 애플리케이션에서 모달 및 네비게이션 뷰의 전환 애니메이션을 사용자 정의할 수 있습니다.

이러한 커스텀 애니메이션 구현은 사용자에게 더 나은 경험을 제공하고, 애플리케이션의 사용자 인터페이스를 더욱 흥미롭게 만들 수 있습니다.

참고 자료

위의 예시 코드는 Swift 5.0을 기준으로 작성되었습니다.