2014-05-08 9 views

Odpowiedz

15

Można użyć CATransition jak wykazano w 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

To nie robi dokładnie to samo. Rozpuszcza się, ale nadal wygląda jak przesuwa się. – BennyTheNerd

+0

Animacja przesuwana (przesuwanie) zostanie wyłączona, jeśli ustawisz animację na NIE, więc działa zgodnie z oczekiwaniami – David

1

SWIFT 3 - od listopada 2017

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

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

Powiązane problemy