Skip to content

19.1_实现UIViewControllerAnimatedTransitioning协议

实现 UIViewControllerAnimatedTransitioning 协议,让你的转场动画更上一层楼!🎉 这个协议是自定义转场动画的核心,它定义了动画的实际执行方式。准备好一起探索了吗?🚀

UIViewControllerAnimatedTransitioning 协议简介

UIViewControllerAnimatedTransitioning 协议主要负责提供转场动画的具体实现。你需要实现两个主要方法:transitionDuration(using:)animateTransition(using:)

  • transitionDuration(using:):这个方法返回动画的持续时间。动画时间长短直接影响用户体验,通常建议使用较短的时间,例如 0.3 到 0.5 秒,以保持流畅感。⏱️
  • animateTransition(using:):这是动画的核心方法。你可以在这里编写动画的具体实现,例如视图的移动、缩放、透明度变化等。

实现 transitionDuration(using:) 方法

这个方法非常简单,只需要返回一个 TimeInterval 类型的值,表示动画的持续时间。例如:

swift
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
    return 0.5 // 动画持续 0.5 秒
}

选择合适的动画时长非常重要。太短可能显得突兀,太长则会降低用户体验。根据你的动画效果,选择一个合适的数值吧!👍

实现 animateTransition(using:) 方法

animateTransition(using:) 方法是整个自定义转场动画的灵魂!你需要在这里获取转场上下文,并使用 UIView.animate(withDuration:animations:) 或其他动画方式来实现你的动画效果。

以下是一些关键步骤:

  1. 获取转场上下文:通过 transitionContext 参数获取转场上下文,它提供了关于转场的各种信息,例如容器视图、起始视图控制器、目标视图控制器等。
  2. 获取起始和目标视图控制器:使用 transitionContext.viewController(forKey:) 方法获取起始和目标视图控制器。
  3. 将目标视图添加到容器视图:通常需要将目标视图控制器的视图添加到容器视图中,以便进行动画。
  4. 执行动画:使用 UIView.animate(withDuration:animations:) 或其他动画方式来实现你的动画效果。
  5. 通知转场完成:在动画完成后,必须调用 transitionContext.completeTransition(_:) 方法来通知系统转场已完成。
swift
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
    guard let fromVC = transitionContext.viewController(forKey: .from),
          let toVC = transitionContext.viewController(forKey: .to) else {
        return
    }

    let containerView = transitionContext.containerView
    containerView.addSubview(toVC.view)

    toVC.view.alpha = 0.0

    UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: {
        toVC.view.alpha = 1.0
    }) { (finished) in
        transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
    }
}

示例:简单的淡入淡出动画

上面的代码实现了一个简单的淡入淡出动画。目标视图控制器的视图初始时是完全透明的,然后在动画过程中逐渐变为完全不透明。这是一个非常基础但常用的转场动画效果。✨

注意事项

  • 错误处理:在获取视图控制器时,一定要进行判空处理,避免出现崩溃。
  • 性能优化:尽量避免复杂的动画计算,以保证动画的流畅性。
  • 用户体验:动画效果应该自然流畅,避免给用户带来不适感。

通过实现 UIViewControllerAnimatedTransitioning 协议,你可以完全掌控转场动画的每一个细节,创造出令人惊艳的用户体验!加油!💪

本站使用 VitePress 制作