iOS基础 自定义转场控制器上的动画 UIPresentationController

本文介绍了如何在iOS应用中自定义转场控制器上的动画,包括使用UIPresentationController创建退出动画,封装转场动画工具类,以及在转场前后进行个性化设置的方法。通过设置UIViewControllerTransitioningDelegate协议,实现转场动画的完整流程,并探讨了使用闭包进行控制器间通信的可能性。
摘要由CSDN通过智能技术生成

概述

约定:
底层控制器:在层级较低的控制器,由它创建新控制器
转场控制器:就是底层控制器创建的新控制器

转场控制器被创建出来,若要自定义转场的动画,比如从中心逐渐放大知道占据满屏,这样系统没有提供的动画,就需要底层控制器来创建新的转场动画。

首先需要底层控制器创建新控制器的时候,给新控制器约定管理转场与动画的代理。如:

accountVC.transitioningDelegate = self

当然这里也可以不使用当前控制器作为转场动画的代理,而是重新创建一个对象作为转场动画的代理。这个部分放在文末解释。

然后底层控制器需要实现相关的协议,即实现控制器转场协议:
UIViewControllerTransitioningDelegate
指定管理转场动画的对象,这里制定管理动画的对象为底层控制器。
如:

extension BasicController:UIViewControllerTransitioningDelegate{
   
    //返回控制自定义转场动画 的 控制器
    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
   
        return self
    }
}

然后便是底层控制器实现相关的协议:

extension BasicController : UIViewControllerAnimatedTransitioning{
   
    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
   
        return 0.5
    }
    
    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
   
    }
}

transitionContext是转场动画的上下文,和绘图上下文一个意思。
由于自定义动画转场了,所以原本系统会做的动作,现在都需要在方法里面自己实现。

extension BasicController : UIViewControllerAnimatedTransitioning{
   
    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
   
        return 0.5
    }
    
    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
   
        //获取弹出的View .from 消失的View .to 弹出的View
        let presentView = (transitionContext.view(forKey: .to))!
        //将弹出的View添加到ContainerView中
        transitionContext.containerView.addSubview(presentView)
        
        presentView.transform = CGAffineTransform.init(translatio
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值