Junior — Middle
¿De qué manera se puede implementar una transición animada personalizada al cambiar entre pantallas en un Navigation Controller?
sobes.tech AI
Respuesta de la IA
Para implementar una transición animada personalizada entre pantallas en UINavigationController, debes usar los protocolos UIViewControllerAnimatedTransitioning y UINavigationControllerDelegate.
-
Crea una clase que implemente
UIViewControllerAnimatedTransitioning, donde describas la lógica de la animación en los métodos:transitionDuration(using:)— duración de la animaciónanimateTransition(using:)— la propia animación de transición
-
Establece como delegado del UINavigationController un objeto que implemente
UINavigationControllerDelegate, y en el método:func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { // devuelve tu objeto de animación return customAnimator }
Ejemplo de un animador personalizado simple:
class CustomAnimator: NSObject, UIViewControllerAnimatedTransitioning {
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return 0.3
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
guard let toView = transitionContext.view(forKey: .to) else {
transitionContext.completeTransition(false)
return
}
let container = transitionContext.containerView
toView.alpha = 0
container.addSubview(toView)
UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: {
toView.alpha = 1
}) { finished in
transitionContext.completeTransition(finished)
}
}
}