8.2_CAAnimation动画类层次结构
CAAnimation 是所有 Core Animation 动画类的基类。它定义了动画的基本属性和行为。理解它的层次结构对于掌握动画至关重要。让我们一起深入了解吧!🎉
CAAnimation 本身是一个抽象类,你不能直接使用它来创建动画。你需要使用它的子类。这些子类提供了不同类型的动画效果。
基础动画类
CAAnimation 的直接子类包括:
- CAPropertyAnimation: 用于改变图层属性的动画。这是最常用的动画类型。
- CAAnimationGroup: 用于将多个动画组合在一起,同时播放。
- CATransition: 用于在图层之间创建过渡效果。
CAPropertyAnimation 又有几个重要的子类:
- CABasicAnimation: 创建从起始值到结束值的简单动画。
- CAKeyframeAnimation: 创建基于关键帧的动画,允许你定义多个中间状态。
CAPropertyAnimation 详解
CAPropertyAnimation 是一个抽象类,它定义了如何改变图层的属性。它有两个重要的属性:
keyPath: 指定要动画的图层属性的名称。例如,position、opacity、transform.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 用于在图层之间创建过渡效果,例如淡入淡出、翻转等。你需要设置 type 和 subtype 属性来指定过渡的类型和方向。
swift
let transition = CATransition()
transition.type = .fade
transition.duration = 1.0
layer.add(transition, forKey: "fadeTransition")通过理解 CAAnimation 的层次结构,你可以更好地掌握 Core Animation,创建出令人惊叹的动画效果!🚀 记住,实践是最好的老师,多尝试不同的动画类型和属性,你会发现更多有趣的可能性!🎉