一。
//关键帧动画
func keyFrameAnimate(){
let imgview = UIImageView(image: UIImage(named: "apple"))
imgview.frame = CGRect(x: 50, y: 50, width: 100, height: 100)
self.view.addSubview(imgview)
//获取图层
let layer = imgview.layer
//1. 创建关键帧
let posAnimate = CAKeyframeAnimation(keyPath: "position")
// 2. 设置关键帧
let value0 = NSValue(cgPoint: layer.position)
let value1 = NSValue(cgPoint: CGPoint(x: layer.position.x
+ 200, y: layer.position.y))
let value2 = NSValue(cgPoint: CGPoint(x: layer.position.x + 200, y: layer.position.y + 200))
let value3 = NSValue(cgPoint: CGPoint(x: layer.position.x, y: layer.position.y + 200))
let value4 = NSValue(cgPoint: layer.position)
posAnimate.values = [value0,value1,value2,value3,value4]
//关键帧和基础动画合用
let opacityAnimate = CABasicAnimation(keyPath: "transform.scale.y")
opacityAnimate.fromValue = 1
opacityAnimate.toValue = 0.1
opacityAnimate.repeatCount = MAXFLOAT
opacityAnimate.duration = 0.2
opacityAnimate.autoreverses = true
//设置每个关键帧的时长
posAnimate.keyTimes = [0, 0.1, 0.6, 0.7,1.0]
//设置每个关键帧的时间曲线
let tf0 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
let tf1 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
let tf2 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
let tf3 = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
posAnimate.timingFunctions = [tf0,tf1,tf2,tf3]
posAnimate.autoreverses = false
posAnimate.repeatCount = MAXFLOAT
posAnimate.duration = 3.0
// 图层增加动画效果
layer.add(posAnimate, forKey: ";posAnimate")
layer.add(opacityAnimate, forKey: "opacityAnimate")
}
二。
// 图层动画
func layerAnimation(){
let myLayer = CALayer()
myLayer.backgroundColor = UIColor.blue.cgColor
myLayer.borderColor = UIColor.brown.cgColor
myLayer.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
myLayer.borderWidth = 5.0
myLayer.cornerRadius = 10.0
myLayer.shadowColor = UIColor.black.cgColor
myLayer.shadowOffset = CGSize(width: 5, height: 5)
myLayer.shadowOpacity = 1
self.view.layer.addSublayer(myLayer)
}
三。
// 显示动画
func BasicAnimation(){
//创建imageView
let imgView = UIImageView(image: UIImage(named: "apple"))
imgView.frame = CGRect(x: 50, y: 50, width: 100, height: 100)
self.view.addSubview(imgView)
let layer = imgView.layer
//1.创建动画指定为比例变化动画,设置属性
let scaleAnimate = CABasicAnimation(keyPath: "transform.scale")
scaleAnimate.fromValue = 1.0
scaleAnimate.toValue = 1.5
scaleAnimate.autoreverses = true
scaleAnimate.repeatCount = MAXFLOAT
scaleAnimate.duration = 2.0
//2.创建动画指定为背景颜色变化动画,设置属性
let bgcAnimate = CABasicAnimation(keyPath: "backgroundColor")
bgcAnimate.fromValue = UIColor.red.cgColor
bgcAnimate.toValue = UIColor.green.cgColor
bgcAnimate.autoreverses = true
bgcAnimate.repeatCount = MAXFLOAT
bgcAnimate.duration = 2.0
let rotateAnimate = CABasicAnimation(keyPath: "transform.rotation.y")
rotateAnimate.toValue = Double.pi
rotateAnimate.repeatCount = MAXFLOAT
rotateAnimate.autoreverses = true
rotateAnimate.duration = 2.0
let tranAnimate = CABasicAnimation(keyPath: "position")
tranAnimate.fromValue = NSValue(cgPoint: CGPoint(x: 50, y: 50))
tranAnimate.toValue = NSValue(cgPoint: CGPoint(x: 300, y: 300))
rotateAnimate.repeatCount = MAXFLOAT
rotateAnimate.autoreverses = true
rotateAnimate.duration = 5.0
let opacityAnimate = CABasicAnimation(keyPath: "opacity")
opacityAnimate.fromValue = 0.0
opacityAnimate.toValue = 1.0
opacityAnimate.autoreverses = true
opacityAnimate.repeatCount = MAXFLOAT
opacityAnimate.duration = 2.0 //0.3闪烁
layer.add(rotateAnimate, forKey: "rotateAnimate")
layer.add(scaleAnimate, forKey: "sacleAnimate")
layer.add(opacityAnimate, forKey: "opacityAnimate")
layer.add(bgcAnimate, forKey: "bgcAnimate")
layer.add(tranAnimate, forKey: "tranAnimate")
}