Junior — Middle
De que forma pode implementar uma transição animada personalizada ao passar entre telas num Navigation Controller?
sobes.tech IA
Resposta da IA
Para implementar uma transição animada personalizada entre telas no UINavigationController, deve usar os protocolos UIViewControllerAnimatedTransitioning e UINavigationControllerDelegate.
-
Crie uma classe que implemente
UIViewControllerAnimatedTransitioning, onde descreve a lógica da animação nos métodos:transitionDuration(using:)— duração da animaçãoanimateTransition(using:)— a própria animação de transição
-
Defina como delegado do UINavigationController um objeto que implemente
UINavigationControllerDelegate, e no método:func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { // devolve o seu objeto de animação return customAnimator }
Exemplo de um animador personalizado simples:
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)
}
}
}