Skip to content

8.2_CAAnimation动画类层次结构

CAAnimation 是所有 Core Animation 动画类的基类。它定义了动画的基本属性和行为。理解它的层次结构对于掌握动画至关重要。让我们一起深入了解吧!🎉

CAAnimation 本身是一个抽象类,你不能直接使用它来创建动画。你需要使用它的子类。这些子类提供了不同类型的动画效果。

基础动画类

CAAnimation 的直接子类包括:

  1. CAPropertyAnimation: 用于改变图层属性的动画。这是最常用的动画类型。
  2. CAAnimationGroup: 用于将多个动画组合在一起,同时播放。
  3. CATransition: 用于在图层之间创建过渡效果。

CAPropertyAnimation 又有几个重要的子类:

  • CABasicAnimation: 创建从起始值到结束值的简单动画。
  • CAKeyframeAnimation: 创建基于关键帧的动画,允许你定义多个中间状态。

CAPropertyAnimation 详解

CAPropertyAnimation 是一个抽象类,它定义了如何改变图层的属性。它有两个重要的属性:

  • keyPath: 指定要动画的图层属性的名称。例如,positionopacitytransform.rotation.z 等。
  • additive: 一个布尔值,指示动画是否应该添加到图层的当前值。

CABasicAnimation 的应用

CABasicAnimation 是 CAPropertyAnimation 的一个具体子类。它用于创建从一个值到另一个值的简单动画。你需要设置以下属性:

  • fromValue: 动画的起始值。
  • toValue: 动画的结束值。
  • byValue: 动画的相对值。

例如,要创建一个改变图层透明度的动画,你可以这样做:

swift
let animation = CABasicAnimation(keyPath: "opacity")
animation.fromValue = 1.0
animation.toValue = 0.0
animation.duration = 2.0
layer.add(animation, forKey: "fadeOut")

CAKeyframeAnimation 的高级用法

CAKeyframeAnimation 允许你创建更复杂的动画,通过定义一系列关键帧。你需要设置以下属性:

  • values: 一个数组,包含动画的关键帧值。
  • path: 一个 CGPath,定义动画的路径。
  • keyTimes: 一个数组,包含每个关键帧的时间。

例如,创建一个沿着路径移动的动画:

swift
let animation = CAKeyframeAnimation(keyPath: "position")
let path = CGMutablePath()
path.move(to: CGPoint(x: 100, y: 100))
path.addLine(to: CGPoint(x: 200, y: 200))
animation.path = path
animation.duration = 2.0
layer.add(animation, forKey: "moveAlongPath")

CAAnimationGroup 的强大功能

CAAnimationGroup 允许你将多个动画组合在一起,同时播放。这对于创建复杂的动画效果非常有用。你需要将要组合的动画添加到 animations 数组中。

swift
let group = CAAnimationGroup()
group.animations = [animation1, animation2]
group.duration = 3.0
layer.add(group, forKey: "groupAnimation")

CATransition 的过渡效果

CATransition 用于在图层之间创建过渡效果,例如淡入淡出、翻转等。你需要设置 typesubtype 属性来指定过渡的类型和方向。

swift
let transition = CATransition()
transition.type = .fade
transition.duration = 1.0
layer.add(transition, forKey: "fadeTransition")

通过理解 CAAnimation 的层次结构,你可以更好地掌握 Core Animation,创建出令人惊叹的动画效果!🚀 记住,实践是最好的老师,多尝试不同的动画类型和属性,你会发现更多有趣的可能性!🎉

本站使用 VitePress 制作