[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() // 사용자 정의 모달 애니메이션 반환
}
}
위 코드를 활용하여 네비게이션 뷰에서 모달을 닫을 때 사용자 정의 애니메이션을 적용할 수 있습니다.