ios – Swift – 如何制作自定义幻灯片动画?
发布时间:2020-12-14 17:17:00 所属栏目:百科 来源:网络整理
导读:我一直在寻找快速代码来在视图之间进行简单的自定义幻灯片切换(从左到右或从右到左,没有反弹),但我只找到了复杂动画的代码.谢谢大家的帮助! 奥斯卡 解决方法 我终于在这里找到了答案: http://mathewsanders.com/animated-transitions-in-swift/#custom-tra
我一直在寻找快速代码来在视图之间进行简单的自定义幻灯片切换(从左到右或从右到左,没有反弹),但我只找到了复杂动画的代码.谢谢大家的帮助!
奥斯卡 解决方法
我终于在这里找到了答案:
http://mathewsanders.com/animated-transitions-in-swift/#custom-transition-animations并稍微加了一下.
1)创建此Swift NSObject文件 class TransitionManager2: NSObject,UIViewControllerAnimatedTransitioning,UIViewControllerTransitioningDelegate { private var presenting = true // MARK: UIViewControllerAnimatedTransitioning protocol methods // animate a change from one viewcontroller to another func animateTransition(transitionContext: UIViewControllerContextTransitioning) { // get reference to our fromView,toView and the container view that we should perform the transition in let container = transitionContext.containerView() let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)! let toView = transitionContext.viewForKey(UITransitionContextToViewKey)! // set up from 2D transforms that we'll use in the animation let offScreenRight = CGAffineTransformMakeTranslation(container.frame.width,0) let offScreenLeft = CGAffineTransformMakeTranslation(-container.frame.width,0) // prepare the toView for the animation toView.transform = self.presenting ? offScreenRight : offScreenLeft // set the anchor point so that rotations happen from the top-left corner toView.layer.anchorPoint = CGPoint(x:0,y:0) fromView.layer.anchorPoint = CGPoint(x:0,y:0) // updating the anchor point also moves the position to we have to move the center position to the top-left to compensate toView.layer.position = CGPoint(x:0,y:0) fromView.layer.position = CGPoint(x:0,y:0) // add the both views to our view controller container.addSubview(toView) container.addSubview(fromView) // get the duration of the animation // DON'T just type '0.5s' -- the reason why won't make sense until the next post // but for now it's important to just follow this approach let duration = self.transitionDuration(transitionContext) // perform the animation! // for this example,just slid both fromView and toView to the left at the same time // meaning fromView is pushed off the screen and toView slides into view // we also use the block animation usingSpringWithDamping for a little bounce UIView.animateWithDuration(duration,delay: 0.0,usingSpringWithDamping: 1,initialSpringVelocity: 1,options: nil,animations: { // slide fromView off either the left or right edge of the screen // depending if we're presenting or dismissing this view fromView.transform = self.presenting ? offScreenLeft : offScreenRight toView.transform = CGAffineTransformIdentity },completion: { finished in // tell our transitionContext object that we've finished animating transitionContext.completeTransition(true) }) } // return how many seconds the transiton animation will take func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval { return 0.4 } // MARK: UIViewControllerTransitioningDelegate protocol methods // return the animataor when presenting a viewcontroller // remmeber that an animator (or animation controller) is any object that aheres to the UIViewControllerAnimatedTransitioning protocol func animationControllerForPresentedController(presented: UIViewController,presentingController presenting: UIViewController,sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? { // these methods are the perfect place to set our `presenting` flag to either true or false - voila! self.presenting = true return self } // return the animator used when dismissing from a viewcontroller func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { self.presenting = false return self } } 2)将2个ViewControllers之间的segue更改为“Custom” 3)在第一个ViewController中添加以下代码: let transitionManager = TransitionManager2() override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject?) { // this gets a reference to the screen that we're about to transition to let toViewController = segue.destinationViewController as! UIViewController // instead of using the default transition animation,we'll ask // the segue to use our custom TransitionManager object to manage the transition animation toViewController.transitioningDelegate = self.transitionManager } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |