如何在将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
)
答
处理动画的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
检查这个问题:http://stackoverflow.com/a/26859432/2082569 – atulkhatri 2015-03-25 09:38:40