2014-05-08 9 views

risposta

15

È possibile utilizzare un CATransition come dimostrato in this answer:

CATransition* transition = [CATransition animation]; 
transition.duration = 0.5; 
transition.type = kCATransitionFade; 
[self.navigationController.view.layer addAnimation:transition forKey:nil]; 
[self.navigationController pushViewController:viewController animated:NO]; 
+1

Questo non fa esattamente la stessa cosa. Si dissolve, ma sembra ancora che scivoli dentro. – BennyTheNerd

+0

L'animazione scorrevole (spingendo) verrà disabilitata se si imposta l'animazione su NO, quindi funziona come previsto – David

1

SWIFT 3 - a partire da novembre 2017

let transition = CATransition() 
transition.duration = 0.5 
transition.type = kCATransitionFade 
self.navigationController?.view.layer.add(transition, forKey:nil) 
0

Il protocollo UINavigationControllerDelegate ha un metodo che può restituire un personalizzato UIViewControllerAnimatedTransitioning object che controllerà l'animazione tra i due controller di visualizzazione coinvolti nella transizione.

Creare una classe Animator per controllare la dissolvenza incrociata di transizione:

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) 
     } 
    } 
} 

e li presenta in vostro UINavigationControllerDelegate:

func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
    return Animator() 
} 

Ecco un tutorial più approfondito: http://blog.rinatkhanov.me/ios/transitions.html

Problemi correlati