视图控制器过渡实现京东加购物车效果

  

这篇文章中我们主要来叙述一下上述动画效果的实现方案。主要涉及视图控制器转场动画的知识。

  

视图控制器过渡实现京东加购物车效果

  

我搭建了个人站点,那里有更多内容,请多多指教。点我哦! ! !

  

<强>呈现一个视图控制器

  

显示一个视图控制器主要有一下几种方式:

  
      <李>使用segue自动显示视图控制器;李   <李>使用showViewController:发送方:和showDetailViewController:发送方:方法显示视图控制器;李   <李>调用presentViewController:动画:完成:方法依模态形式显示视图控制器李   
  

通过上述方式,我们可以将一个视图控制器显示出来,而对于显示地形式,我们可以使用UIKit中预定义的形式,也可以自定义(即自定义转场动画)。

  

<强>定制过渡动画

  

自定义转场动画中,主要包含以下几个组件:

  
      <李>呈现视图控制器(正在显示的视图控制器)   <李>动画师(动画管理者)   <李>视图控制器(要显示的视图控制器)   <李>过渡委托对象(转场代理,用来提供动画师对象)   
  

实现自定义转场动画,通常按照以下几个步骤来完成

  
      <李>创建了视图控制器;李   <李>创建动画师;李   <李>设置了视图控制器的transitioningDelegate属性,并实现UIViewControllerTransitioningDelegate提供动画师对象,李   <李>在呈现视图控制器中调用presentViewController:动画:完成:显示了视图控制器;李   
  

<强>呈现视图控制器

  

这里,我们将呈现视图控制器本身作为其转场代理,你也可以使用单独的代理对象。

        类PresentedViewController: ui {   让imageView=UIImageView(图片:用户界面图像(命名为:“jd_add.jpg”))   覆盖func viewDidLoad () {   super.viewDidLoad ()//1。设置transitioningDelegate(转场代理)   transitioningDelegate=自我   modalPresentationStyle=.custom   view.addSubview (imageView)   }   覆盖func viewDidLayoutSubviews () {   super.viewDidLayoutSubviews ()   imageView.frame=CGRect中(x: 0 y: 120,宽度:UIScreen.main.bounds。宽度,高度:UIScreen.main.bounds。身高- 120)   }   覆盖func touchesBegan(_触动:设置事件:uievent # 63;) {   自我。解雇(动画:真的,完成:nil)   }   }      

<强>动画

  

动画师作为转场动画的管理者,主要负责呈现和解雇动画效果。

  

<强>动画时长

     ///转场动画时长   func transitionDuration(使用transitionContext: UIViewControllerContextTransitioning& # 63;)→TimeInterval {   返回TimeInterval (0.5)   }      

<>强执行动画

     ///执行转场动画   func animateTransition(使用transitionContext: UIViewControllerContextTransitioning) {   开关类型{   案例.Present:   现在(transitionContext transitionContext):   案例.Dismiss:   解雇(transitionContext transitionContext):   }   }      

<强>呈现动画

     ///显示动画   func礼物(transitionContext: UIViewControllerContextTransitioning) {/* * 1。从转场上下文中取出展示/提出视图控制器及容器视图*/让presentingVC=transitionContext。viewController (forKey:从今以后),# 63;ViewController其他{   返回   }   让presentedVC=transitionContext。viewController (forKey:文等),# 63;其他PresentedViewController {   返回   }   让containerView=transitionContext.containerView/* * 2。设置呈现视图控制器所显示内容的属性*///对presentingVC的视图内容截屏,用于presentedVC显示出来时的背景   让presentingVCViewSnapshot=presentingVC.view。其他snapshotView (afterScreenUpdates: false) {   返回   }//隐藏presentingVC的视图,并将其截屏添加到containerView中   presentingVC.view。isHidden=true   containerView.addSubview (presentingVCViewSnapshot)//改变presentingVCViewSnapshot的焦点   presentingVCViewSnapshot.layer。y anchorPoint=CGPoint (x: 0.5: 1)//更新presentingVCViewSnapshot的框架   presentingVCViewSnapshot.frame=presentingVC.view.frame/* * 3。设置了视图控制器所显示内容的属性*/presentedVC.view.frame=CGRect中(x: 0 y: containerView.bounds。高度、宽度:containerView.bounds。宽度,高度:containerView.bounds.height)   containerView.addSubview (presentedVC.view)/* * 4。设置呈现转场动画*/UIView。动画(withDuration: transitionDuration(使用:transitionContext),动画:{//改变presentingVCViewSnapshot的层的变换,使其绕X轴旋转,并改变大小   presentingVCViewSnapshot.layer.transform。m34=-1/100.0   presentingVCViewSnapshot.layer。变换=presentingVCViewSnapshot.layer。变换=CATransform3DConcat (CATransform3DMakeRotation (CGFloat (0.1), 1, 0, 0), CATransform3DMakeScale (0.85, 0.95, 1))//改变presentedVC的视图的转换   presentedVC.view。变换=CGAffineTransform (translationX: 0, y: -containerView.bounds.height)   }){(完成)//告知UIKit呈现转场动画结束(很重要)   transitionContext.completeTransition(真正的)   }   }

视图控制器过渡实现京东加购物车效果