Junior — Middle
Come si può implementare una transizione animata personalizzata durante il passaggio tra schermate in un Navigation Controller?
sobes.tech AI
Risposta dell'AI
Per implementare una transizione animata personalizzata tra schermate in UINavigationController, è necessario utilizzare i protocolli UIViewControllerAnimatedTransitioning e UINavigationControllerDelegate.
-
Creare una classe che implementa
UIViewControllerAnimatedTransitioning, dove si descrive la logica dell'animazione nei metodi:transitionDuration(using:)— durata dell'animazioneanimateTransition(using:)— l'animazione stessa
-
Impostare come delegato del UINavigationController un oggetto che implementa
UINavigationControllerDelegate, e nel metodo:func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { // restituisce il tuo oggetto di animazione return customAnimator }
Esempio di un animatore personalizzato semplice:
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)
}
}
}