如何在将UIViewController呈现给自定义时更改默认转换

问题描述:

我想从当前视图控制器中呈现另一个UIViewController。过渡动画设置为默认,并且呈现的UIViewController似乎从下到上出现。但是我试图将动画从顶部设置为底部。我该如何实现这个目标? 我曾尝试使用过渡效果作为封面垂直,翻转水平,交叉溶解,但没有一个似乎根据我的选择。任何建议我怎么能做到这一点?如何在将UIViewController呈现给自定义时更改默认转换

let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let editCategoryVC: EditCategoryVC = storyboard.instantiateViewControllerWithIdentifier("editCategoryVC")as EditCategoryVC 
     self.presentViewController(editCategoryVC, animated:true, completion: nil 

+0

检查这个问题:http://*.com/a/26859432/2082569 – atulkhatri 2015-03-25 09:38:40

处理动画的TransitionHandler助手类

import UIKit 

class TransitionHandler : NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate { 

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

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

    func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval { 

     return 0.9 
    } 

    func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 

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

     //e.g to show the animation from x axis change this frame as required 
     // let offScreenUp = CGAffineTransformMakeTranslation(-container.frame.size.width, 0) 
     //  let offScreenDown = CGAffineTransformMakeTranslation(container.frame.size.width,0) 
     let offScreenUp = CGAffineTransformMakeTranslation(0, 0)//(-container.frame.size.width,0) 
     let offScreenDown = CGAffineTransformMakeTranslation(0, container.frame.size.height) 
     toView.transform = offScreenUp 
     container.addSubview(toView) 
     container.addSubview(fromView) 
     let duration = self.transitionDuration(transitionContext) 

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

      fromView.transform = offScreenDown 
      toView.transform = CGAffineTransformIdentity 

      }, completion: { finished in 

       transitionContext.completeTransition(true) 
     }) 

    } 
} 

你的类,它显示了在旁的按钮控制器点击

class ViewController: UIViewController { 

    let transitionHandler = TransitionHandler() 

    @IBAction func showVCAnimation(sender: AnyObject) { 

     var storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let nextVC = storyboard.instantiateViewControllerWithIdentifier("editCategoryVC") as EditCategoryVC 
     nextVC.transitioningDelegate = self.transitionHandler 
     self.presentViewController(nextVC, animated: true, completion: nil) 
    } 
} 

好感谢AppCoda!

以下能正常工作,我认为

让editCategoryVC = self.storyboard .instantiateViewControllerWithIdentifier( “editCategoryVC”)作为editCategoryVC self.presentViewController(editCategoryVC,动画:真,竣工:无

+0

多数民众赞成在问题..这段代码的动画从底部到顶部呈现视图控制器。我想要从上到下的动画 – 2015-03-25 09:49:57