2015-11-18 3 views
1

Я увидел учебник по Appcoda TransitionViewControllerstransition меню от донизу, и я его реализовал. Затем я попытался сделать transition снизу вверх, используя UIViewControllerContextTransitioning. Но, делая это неправильно, я устанавливал неправильные ценности, которые я думаю. Ниже приведен кодCustom ViewController Transition

func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 

    //Get reference to our fromView, toView and the container view 
    let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey) 
    let toView = transitionContext.viewForKey(UITransitionContextToViewKey) 

    //Setup the transform for sliding 
    let container = transitionContext.containerView() 
    let height = container?.frame.height 
    let moveDown = CGAffineTransformMakeTranslation(0, height! - 150) 
    let moveUp = CGAffineTransformMakeTranslation(0, -50) 

    //Add both views to the container view 
    if isPresenting { 
     toView?.transform = moveUp 
     snapShot = fromView?.snapshotViewAfterScreenUpdates(true) 
     container?.addSubview(toView!) 
     container?.addSubview(snapShot!) 
    } 

    //Perform the animation 
    UIView.animateWithDuration(duration, delay: 0.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.3, options: UIViewAnimationOptions(rawValue: 0), animations: { 
     if self.isPresenting { 
      self.snapShot?.transform = moveDown 
      toView?.transform = CGAffineTransformIdentity 
     } else { 
      self.snapShot?.transform = CGAffineTransformIdentity 
      fromView?.transform = moveUp 
     } 
     }, completion: {finished in 

      transitionContext.completeTransition(true) 
      if !self.isPresenting { 
       self.snapShot?.removeFromSuperview() 
      } 
    }) 
} 

ответ

1
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval { 
    return duration 
} 

func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 
    // Get reference to our fromView, toView and the container view 
    let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)! 
    let toView = transitionContext.viewForKey(UITransitionContextToViewKey)! 

    // Set up the transform we'll use in the animation 
    guard let container = transitionContext.containerView() else { 
     return 
    } 

    let moveUp = CGAffineTransformMakeTranslation(0, container.frame.height + 50) 
    let moveDown = CGAffineTransformMakeTranslation(0, -250) 


    // Add both views to the container view 
    if isPresenting { 
     toView.transform = moveUp 
     snapshot = fromView.snapshotViewAfterScreenUpdates(true) 
     container.addSubview(toView) 
     container.addSubview(snapshot!) 
    } 

    // Perform the animation 
    UIView.animateWithDuration(duration, delay: 0.0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.8, options: [], animations: { 

     if self.isPresenting { 
      self.snapshot?.transform = moveDown 
      toView.transform = CGAffineTransformIdentity 
     } else { 
      self.snapshot?.transform = CGAffineTransformIdentity 
      fromView.transform = moveUp 
     } 

     }, completion: { finished in 

      transitionContext.completeTransition(true) 

      if !self.isPresenting { 
       self.snapshot?.removeFromSuperview() 
      } 
    }) 
} 

Это должно работать. Я проверил учебник, которым вы поделились, и вы, вероятно, не видите меню внизу, потому что способ MenuTableViewController.swift настроен на раскадровке, он сделан так, что меню всегда запускается сверху, поэтому измените это и он должен работать отлично. Дайте знать, если у вас появятся вопросы.

+0

Это то, что я получаю http://www.imageno.com/m7fqtttwn8c7pic.html того же опыта, что и у меня. Предполагается, что представление должно нажать First View UP, вместо этого оно работает под ним –

+0

oh, оба они делают это. Они точно не толкают ничего вверх или вниз. Это просто делает вид, который вы на слайде немного вниз или вверх. Если вы понимаете, о чем я? Я могу исправить файл для вас, чтобы меню появилось внизу. вам просто нужно сыграть с MenuTableViewController в раскадровке и заставить их появиться внизу. Вы можете сделать это, добавив представление и сделав начало списка внизу или что-то в этом роде. –

+0

Хорошо. Благодарю. Это сделало бы –