Protokół UINavigationControllerDelegate ma metodę, która może powrócić zwyczaj UIViewControllerAnimatedTransitioning obiektu, który będzie kontrolować animację między dwoma kontrolerami widoku uczestniczącymi w przejściu.
Utwórz klasę Animator kontrolować krzyż rozpuścić przejścia:
class Animator: NSObject, UIViewControllerAnimatedTransitioning {
let animationDuration = 0.25
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return animationDuration
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
let toVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)
toVC?.view.alpha = 0.0
let fromVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)
transitionContext.containerView.addSubview(fromVC!.view)
transitionContext.containerView.addSubview(toVC!.view)
UIView.animate(withDuration: animationDuration, animations: {
toVC?.view.alpha = 1.0
}) { (completed) in
fromVC?.view.removeFromSuperview()
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
}
}
}
i dostarcza je w swojej UINavigationControllerDelegate:
func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return Animator()
}
Oto poradnik bardziej dogłębne: http://blog.rinatkhanov.me/ios/transitions.html
To nie robi dokładnie to samo. Rozpuszcza się, ale nadal wygląda jak przesuwa się. – BennyTheNerd
Animacja przesuwana (przesuwanie) zostanie wyłączona, jeśli ustawisz animację na NIE, więc działa zgodnie z oczekiwaniami – David