2014-09-20 3 views
2

Существует большой учебник для пользовательского анимированных перетекает в Swift здесь:Пользовательского UINavigationController Segue Swift

http://mathewsanders.com/animated-transitions-in-swift/

Я новичок и не могу понять, как использовать этот же метод для создания пользовательского SEGUE для UINavigationController

VC код:

class FlashCardView: UIViewController, UINavigationControllerDelegate { 

    let transitionManager = TransitionManager() 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     let toViewController = segue.destinationViewController as UIViewController 

     toViewController.transitioningDelegate = self.transitionManager 
    } 
    /* ... */ 
} 

класс TransitionManager код:

import UIKit 

class TransitionManager: NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate { 

    private var presenting = true 

    func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 
     println("test1") 

     let container = transitionContext.containerView() 
     let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)! 
     let toView = transitionContext.viewForKey(UITransitionContextToViewKey)! 


     let offScreenRight = CGAffineTransformMakeTranslation(container.frame.width, 0) 
     let offScreenLeft = CGAffineTransformMakeTranslation(-container.frame.width, 0) 

     if (self.presenting){ 
      toView.transform = offScreenRight 
     } 
     else { 
      toView.transform = offScreenLeft 
     } 

     container.addSubview(toView) 
     container.addSubview(fromView) 

     let duration = self.transitionDuration(transitionContext) 

     UIView.animateWithDuration(duration, delay: 0.0, usingSpringWithDamping: 5, initialSpringVelocity: 0.8, options: nil, animations: { 

      if (self.presenting){ 
       fromView.transform = offScreenLeft 
      } 
      else { 
       fromView.transform = offScreenRight 
      } 
      toView.transform = CGAffineTransformIdentity 

      }, completion: { finished in 
           transitionContext.completeTransition(true) 
     }) 

    } 

    func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval { 
     println("test2") 

     return 0.5 
    } 

    func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
     println("test3") 
     self.presenting = true 
     return self 
    } 

    func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
     println("test4") 
     self.presenting = false 
     return self 
    } 
} 

ответ

0

К счастью, я изучил переходы с этого веб-сайта, это замечательный блог. Кажется, что вы не хотите, чтобы эффект отскока стал концом перехода. Используйте нормальный анимированный график.

Вот рабочее решение для вашей потребности:

class TransitionManager: NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate { 


func animateTransition(transitionContext: UIViewControllerContextTransitioning) 
{ 

    let container = transitionContext.containerView() 
    let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)! 
    let toView = transitionContext.viewForKey(UITransitionContextToViewKey)! 


    let offScreenRight = CGAffineTransformMakeTranslation(container.frame.width, 0) 
    let offScreenLeft = CGAffineTransformMakeTranslation(-container.frame.width, 0) 



    toView.transform = offScreenRight 

    // add the both views to our view controller 
    container.addSubview(toView) 
    container.addSubview(fromView) 

    let duration = self.transitionDuration(transitionContext) 
      UIView.animateWithDuration(0.8, delay: 0.0, options: nil, animations: { 

     fromView.transform = offScreenLeft 
     toView.transform = CGAffineTransformIdentity 

     }, completion: { finished in 

      transitionContext.completeTransition(true) 

    }) 
} 

func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval { 
    return 0.5 
} 

    func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
    return self 
} 

func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
    return self 
} 

}

Смежные вопросы