返回

动画中的暂停艺术:CABasicAnimation fillMode 的多彩画布

IOS

在暂停中感知动画的律动:fillMode 与 removedOnCompletion 的结合

CABasicAnimation 的 fillMode 属性就像一位魔术师,赋予动画暂停和延展的魔力。它可以让我们在动画的某个时刻按暂停键,让动画定格在某个状态,仿佛时间就此凝固。而 removedOnCompletion 属性则决定了动画在完成后是否应该被移除。当我们结合这两个属性时,就可以创造出一些非常有趣的效果。

让我们先来看看 fillMode 的各个 case:

  • kCAFillModeForwards: 动画在完成后仍保持在最后一帧的状态。
  • kCAFillModeBackwards: 动画在开始之前先从最后一帧开始播放,然后正向播放到第一帧。
  • kCAFillModeBoth: 动画在完成后仍保持在最后一帧的状态,但在开始之前也先从最后一帧开始播放,然后正向播放到第一帧。
  • kCAFillModeRemoved: 动画在完成后被移除,不会留下任何痕迹。

现在,让我们再看看 removedOnCompletion 的各个 case:

  • YES: 动画在完成后被移除。
  • NO: 动画在完成后仍保留在图层上。

通过结合 fillMode 和 removedOnCompletion,我们可以创造出多种多样的动画效果。例如,我们可以让动画在完成后定格在最后一帧,或者让动画在开始之前先从最后一帧播放,然后正向播放到第一帧。我们还可以让动画在完成后被移除,或者让动画在完成后仍保留在图层上。

代码示例:让动画在完成后定格在最后一帧

let animation = CABasicAnimation(keyPath: "position")
animation.fromValue = CGPoint(x: 100, y: 100)
animation.toValue = CGPoint(x: 200, y: 200)
animation.duration = 1.0
animation.fillMode = kCAFillModeForwards
animation.removedOnCompletion = false

layer.add(animation, forKey: "position")

这段代码会创建一个动画,让一个图层的 position 属性从 (100, 100) 移动到 (200, 200)。动画的持续时间为 1 秒,fillMode 为 kCAFillModeForwards,removedOnCompletion 为 false。这意味着动画在完成后仍保持在最后一帧的状态,即图层的 position 属性仍为 (200, 200)。

结语

CABasicAnimation 的 fillMode 和 removedOnCompletion 属性为我们提供了强大的工具,让我们可以创造出各种各样的动画效果。通过结合这两个属性,我们可以让动画在完成后定格在最后一帧,或者让动画在开始之前先从最后一帧播放,然后正向播放到第一帧。我们还可以让动画在完成后被移除,或者让动画在完成后仍保留在图层上。