iOS视图动画:原理、实现与控制
1. 反向动画示例
当两个动画直接相互对立时,会产生有趣的效果。以下是一个平滑自动反转动画的示例代码:
let yorig = self.v.center.y
let anim = UIViewPropertyAnimator(duration: 2, curve: .easeInOut) {
self.v.center.y += 100
}
anim.addAnimations({
self.v.center.y = yorig
}, delayFactor: 0.5)
anim.startAnimation()
在这个动画中,视图会先朝着比原始位置低 100 点的位置移动,但在大约一半的路程时,它会平滑地减速并反转,最终回到原始位置。
2. 时间曲线
时间曲线将动画已过去的时间比例(x 轴)与动画已发生的变化比例(y 轴)进行映射。它的端点是 (0.0, 0.0) 和 (1.0, 1.0),因为在动画开始时,没有时间流逝,也没有发生变化;在动画结束时,所有时间都已过去,所有变化都已发生。时间曲线主要分为两种:立方贝塞尔曲线和弹簧曲线。
2.1 立方时间曲线
立方贝塞尔曲线由其端点定义,每个端点只需要一个贝塞尔控制点来定义曲线的切线。由于曲线的端点是已知的,定义两个控制点就足以描述整个曲线。
例如,内置的缓入缓出计时函数由两个控制点 (0.42, 0.0) 和 (0.58, 1.0) 定义。以下是不同方式指定时间曲线的情况:
-