2014-09-20 2 views
2

여기 스위프트에서 사용자 지정 애니메이션 segues에 대한 좋은 튜토리얼이있다 :사용자 지정 UINavigationController가 SEGUE 스위프트

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

내가 초보자 오전과 UINavigationController가에 대한 사용자 지정 SEGUE을 만들려면이 같은 기술을 사용하는 방법을 알아낼 수 없습니다가

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

운좋게도 그 웹 사이트에서 전환을 배웠습니다. 놀라운 블로그입니다. 튀는 효과가 전환의 끝이되는 것을 원치 않는 것 같습니다. 정상적인 animatewithduration를 사용하십시오.

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 
} 

}

: 여기

는 당신의 필요를위한 작업 솔루션입니다
관련 문제