Skip to content

1.4_Core Animation架构概览

Core Animation 是 iOS 和 macOS 平台上进行动画渲染的核心框架。它提供了一套强大的工具,让你能够创建流畅、高性能的动画效果。理解 Core Animation 的架构对于掌握 iOS 动画至关重要。🎉

核心概念:图层(Layer)

在 Core Animation 中,图层(Layer) 是动画的基础。你可以把图层想象成视图(View)的幕后工作者。每个视图都有一个关联的图层,负责实际的绘制和动画效果。图层是一个树状结构,称为 图层树(Layer Tree)

  • 图层树:管理屏幕上所有图层的层级关系。
  • 渲染树:Core Animation 内部使用的树,用于准备动画的每一帧。
  • 呈现树:动画过程中图层的实际状态,用于显示动画效果。

模型层、呈现层和渲染层

Core Animation 采用了一种三层结构来管理动画:模型层(Model Layer)、呈现层(Presentation Layer)和渲染层(Render Layer)。

  1. 模型层(Model Layer):存储动画的最终状态。它是你设置属性的地方,例如位置、大小和透明度。
  2. 呈现层(Presentation Layer):反映动画的当前状态。在动画进行时,呈现层会不断更新,让你看到动画的实时效果。
  3. 渲染层(Render Layer):Core Animation 内部使用的层,负责实际的绘制工作。

隐式动画与显式动画

Core Animation 支持两种类型的动画:隐式动画和显式动画。

  • 隐式动画:当你直接修改图层的属性时,Core Animation 会自动创建一个动画。例如,改变 layer.opacity 的值。
  • 显式动画:你需要使用 CABasicAnimationCAKeyframeAnimation 等类来创建动画对象,并将其添加到图层上。这种方式可以更精确地控制动画的各个方面。

CAAnimation 类族

CAAnimation 是所有动画类的基类。Core Animation 提供了多种动画类,用于实现不同的动画效果。

  • CABasicAnimation:用于实现简单的属性动画,例如位置、大小和透明度的变化。
  • CAKeyframeAnimation:用于实现关键帧动画,你可以指定多个关键帧,让动画按照你设定的路径进行。
  • CAAnimationGroup:用于将多个动画组合在一起,同时播放。
  • CATransition:用于实现图层之间的过渡效果,例如淡入淡出、推入和覆盖。

事务(Transaction)

Core Animation 使用 事务(Transaction) 来管理动画的提交。当你修改图层的属性时,这些修改会被添加到当前的事务中。当事务提交时,Core Animation 会将这些修改应用到图层上,并开始动画。你可以使用 CATransaction 类来控制事务的行为,例如设置动画的持续时间和完成回调。

例子:简单透明度动画

swift
import UIKit

class ViewController: UIViewController {

    let myView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))

    override func viewDidLoad() {
        super.viewDidLoad()
        myView.backgroundColor = .red
        view.addSubview(myView)
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        UIView.animate(withDuration: 2.0) {
            self.myView.alpha = 0.0 // 隐式动画
        }
    }
}

在这个例子中,我们通过修改 myView.alpha 属性来创建一个隐式动画。当 alpha 的值从 1.0 变为 0.0 时,视图会逐渐消失。

总结

Core Animation 是一个功能强大的动画框架,理解其架构对于创建复杂的动画效果至关重要。通过掌握图层、模型层、呈现层、动画类和事务等概念,你将能够更好地控制 iOS 动画,为你的应用增添更多活力。🚀

本站使用 VitePress 制作