动画曲线我们应该或多或少都去接触过,简单介绍下下面每个枚举值的概念
public enum UIViewAnimationCurve : Int {
case easeInOut // slow at beginning and end,也就是开头和末尾都很慢,中间快
case easeIn // slow at beginning 开始很慢,之后很快
case easeOut // slow at end 最后很慢,前面很快
case linear //匀速
}
当然动画曲线的数值肯定不止上面所说的那四个,我们如果尝试去监听键盘的frame的变化的话我们应该都看到过下面的这个东西
UIView.animate(withDuration: duration) {
//设置动画曲线为7之后
UIView.setAnimationCurve(UIViewAnimationCurve(rawValue: curve)!)
//强行更新下约束
self.view.layoutIfNeeded()
}
这里如果设置了动画曲线的效果为7之后,就表示如果你之前添加了一次动画,然后之后你又添加了动画,就会让动画的图层直接运动到你后续动画的目标位置,这里做的动画就是去改变控件的y值,也就是它的位置。也就是说你本来想让这个控件添加了先向下的动画,再向上的动画,如果你向下的动画没有完成,然后你又添加了向上的动画,那么它就会直接到你向上的所要去的的位置。 如果我们设置了动画曲线为7,也就是说我们设置的动画时长无效,动画时长变成了0.5s
let animation = view1.layer.animation(forKey: "position")
print(animation?.duration)
输出为0.5
补充一下其实UIView块动画本质上就是对CAAnimation的包装