动画: 图片按照图中红色轨迹线移动:
企业微信截图_78de0b78-39bd-4060-b58c-f72cb0b88df9.png
位移关键帧动画: 运动关键点的方式制作位移动画; CAAnimationDelegate
import UIKit
// 遵循CAAnimationDelegate代理:
class ViewController: UIViewController, CAAnimationDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
yeAnimationForPath()
}
func yeAnimationForPath(){
// 显示: 测试:
let imageView = UIImageView(frame: CGRect(x: 40, y: 120, width: 84, height: 84))
imageView.image = UIImage(named: "star")
self.view.addSubview(imageView)
//--- 9.20创建位移关键帧动画
/// 实例化一个关键帧动画, 可为层属性指定关键路径,以产生动画:
let animation = CAKeyframeAnimation(keyPath: "TyePosition")
animation.delegate = self
animation.duration = 5.0 //总时长 5s;
// 动画路径点:
let point1 = CGPoint(x: 40, y: 120)
let point2 = CGPoint(x: 340, y: 120)
let point3 = CGPoint(x: 60, y: 360)
let point4 = CGPoint(x: 340, y: 360)
/// 创建动画的值数组:
animation.values = [NSValue(cgPoint: point1), NSValue(cgPoint: point2),
NSValue(cgPoint: point3), NSValue(cgPoint: point4)] //路径点;
/// 动画的关键点时间:
animation.keyTimes = [NSNumber(value: 0.0), NSNumber(value: 0.4),
NSNumber(value: 0.6), NSNumber(value: 1.0)] //到达对应位置点的时长比(0.4*5=2s:从第一个点到第二个点所花费的时间);
/// 为视图添加动画: 开始播放动画
imageView.layer.add(animation, forKey: "TyeMove")
}
// CAAnimationDelegate 代理方法:
func animationDidStart(_ anim: CAAnimation) {
print("--- 响应动画开始的事件: --")
}
func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
print("--- 响应动画结束的事件: --")
}
}