当你不想使用系统默认的界面跳转,这时你将需要转场动画,适宜的使用转场技术,将会使你的app锦上添花
效果图
push和pop present和dismiss 实战关于转场的使用,你需要了解的知识点
用文字解释下
在使用转场前,需要根据当前的场景来决定使用哪种转场(导航栏push或者模式化弹出),两种场景使用的转场方法不同
①导航栏push
需要设置导航栏的代理 self.navigationController.delegate = xxx,对应的控制器(xxx)需要实现代理方法,在代理方法中返回实现动画的对象
②模式化
需要被弹出的控制器实现转场代理 vc.transitioningDelegate = xxx,对应的控制器(xxx)需要实现代理方法,在代理方法中返回实现动画的对象
PS:转场的动画需要写在遵守转场协议(UIViewControllerAnimatedTransitioning)的类中
关于转场的动画,你需要知道的
在代理方法中返回的执行动画的对象必须遵守转场动画协议(UIViewControllerAnimatedTransitioning)并且实现两个协议方法
// 转场动画执行所需的时间
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return 0.8
}
// 动画执行的地方
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
// 判断导航栏是push 还是 pop,执行对应的动画
if self.animationType == .Push {
// push动画方法
pushAnimation(transitionContext)
} else {
popAnimation(transitionContext)
}
}
上图中的containView是执行动画的容器,需要将执行动画的view添加到容器中
transitionContext是上下文对象,可以从中获取转场过程中相关的视图或者控制器
transitionContext.view(forKey: .to) 获取目标视图,也就是跳转后的视图
transitionContext.view(forKey: .from)获取源视图,发起跳转的视图
PS:demo2中,我写了足够多的注释帮助你理解代码,需要多写代码才能快速学会使用
网友评论