[swift] 네비게이션 뷰에서 모달을 닫을 때의 애니메이션을 사용자 정의하는 방법은?

1. Custom Modal Animation 클래스 생성

import UIKit

class CustomModalAnimation: NSObject, UIViewControllerAnimatedTransitioning {
    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 0.5  // 애니메이션 지속 시간 설정
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        guard let fromVC = transitionContext.viewController(forKey: .from),
              let toVC = transitionContext.viewController(forKey: .to) else {
            return
        }

        let containerView = transitionContext.containerView
        // 애니메이션 코드 작성
       
        UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: {
            // 애니메이션 적용
        }) { _ in
            let isCanceled = transitionContext.transitionWasCancelled
           
            // 애니메이션 완료 처리
           
            transitionContext.completeTransition(!isCanceled)
        }
    }
}

2. 애니메이션을 사용할 뷰 컨트롤러에 적용

class YourViewController: UIViewController, UIViewControllerTransitioningDelegate {
    func presentCustomModal() {
        let vc = UIViewController()
        // 모달 제안
        vc.modalPresentationStyle = .custom
        vc.transitioningDelegate = self
        present(vc, animated: true, completion: nil)
    }
   
    // UIViewControllerTransitioningDelegate 메서드 구현
    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return nil  // 옵셔널하게 커스텀 프레젠테이션 애니메이션 반환
    }
   
    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return CustomModalAnimation()  // 사용자 정의 모달 애니메이션 반환
    }
}

위 코드를 활용하여 네비게이션 뷰에서 모달을 닫을 때 사용자 정의 애니메이션을 적용할 수 있습니다.