1.前言
CAKeyframeAnimation是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值
2.属性
keyPath : 要设置的属性
path : 路径 可用UIBezierPath,这是一个 CGPathRef 对象,默认是空的,当我们创建好CAKeyframeAnimation的实例的时候,可以通过制定一个自己定义的path来让 某一个物体按照这个路径进行动画。这个值默认是nil 当其被设定的时候 values 这个属性就被覆盖
values:一个数组,提供了一组关键帧的值, 当使用path的 时候 values的值自动被忽略。
duration : 动画时长
repeatCount : 重复次数
calculationMode : 动画计算方式
kCAAnimationLinear : 默认差值
kCAAnimationDiscrete : 逐帧显示
kCAAnimationPaced : 匀速 无视keyTimes
kCAAnimationCubic : keyValue之间曲线平滑 可用 tensionValues,continuityValues,biasValues 调整
kCAAnimationCubicPaced : keyValue之间平滑差值 无视keyTimes
rotationMode : 旋转方式
kCAAnimationRotateAuto : 自动
kCAAnimationRotateAutoReverse : 自动翻转 不设置则不旋转
3.示例
UILabel左右晃动,类似于手机输入密码错误,提示密码错误,并左右晃动
func shake(){
let kfa = CAKeyframeAnimation()
kfa.keyPath = "transform.translation.x"
let s = 16
kfa.values = [-s,0,s,0,-s,0,s,0]
kfa.duration = 0.1
kfa.repeatCount = 2
kfa.isRemovedOnCompletion = true
self.add(kfa, forKey: "shake")
}
设置calculationMode属性,得到不同的动画
func configCircleKeyAnimation(){
let animation = CAKeyframeAnimation()
animation.keyPath = "position"
animation.path = UIBezierPath(ovalIn: CGRect(x: 20, y: 200, width: 200, height: 200)).cgPath
animation.duration = 0.5
animation.isAdditive = true
animation.repeatCount = 3
/*
kCAAnimationLinear : 默认差值
kCAAnimationDiscrete : 逐帧显示
kCAAnimationPaced : 匀速 无视keyTimes
kCAAnimationCubic : keyValue之间曲线平滑 可用 tensionValues,continuityValues,biasValues 调整
kCAAnimationCubicPaced : keyValue之间平滑差值 无视keyTimes
*/
animation.calculationMode = kCAAnimationPaced //无视keytimes
/*
kCAAnimationRotateAuto : 自动
kCAAnimationRotateAutoReverse : 自动翻转
不设置则不旋转
*/
animation.rotationMode = kCAAnimationRotateAuto
self.add(animation, forKey: "position")
}
4.效果图
5.DEMO下载
swift版: http://download.csdn.net/detail/u014220518/9690214
oc版:http://download.csdn.net/detail/u014220518/9690594