一 介紹下 CABasicAnimation 的屬性
1.keyPath --> 要做動畫的屬性(此屬性是有固定的選擇的,不可以隨意設(shè)置)
/* Animations implement the same property model as defined by CALayer.
- See CALayer.h for more details. */(官方文檔給出的解答. 翻譯: 這個屬性的設(shè)置去看CALayer的頭文件里面所包含的屬性就ok了)
包括以下屬性
1.transform.scale 比例轉(zhuǎn)換
2.transform.scale.x 寬度的比例轉(zhuǎn)換
3.transform.scale.y 高的比例轉(zhuǎn)換
4.transform.rotation.z 平面圖的旋轉(zhuǎn)
5.opacity 透明度
6.margin 邊框間距? (這個屬性筆者設(shè)置過,但是無效,望有設(shè)置過且有效的朋友分享下代碼)
backgroundColor = 背景色
cornerRadius = layer的角度
borderWidth = 邊框?qū)挾?/p>
contents = 內(nèi)容
bounds = 大小
contentsRect = 內(nèi)容矩形
frame = 位置
hidden = 隱藏
mask = 標(biāo)記
maskToBounds
position = 位置
shadowOffset = 陰影偏移?
shadowColor = 陰影顏色
shadowRadius = 陰影角度
- fromValue, toValue
fromValue = 起始位置 若keyPath屬性為position 那么起始點(diǎn)的位置默認(rèn)為 視圖中心點(diǎn) 即anchorPoint(0.5, 0.5) , 改變 錨點(diǎn) 也會改變動畫效果
toValue 結(jié)束位置 若keypath為position 同上
3.duration 動畫播放時間
4.repeatCount 重復(fù)播放次數(shù) 注:無限次 MAXFLOAT 此屬性不可以和 repeatDuration 同時使用
5.repeatDuration 指定動畫重復(fù)播放多久, 在此時間內(nèi),動畫會一直重復(fù)播放,直到達(dá)到設(shè)定時間.不可以和repeatCount 同時使用
6.autoreverses 當(dāng)你設(shè)定這個屬性為 YES 時,在它到達(dá)目的地之后,動畫會從結(jié)束位置的狀態(tài)回到初始位置的狀態(tài),代替了直接跳轉(zhuǎn)到 開始的值(default is NO)
7.speed 默認(rèn)值1.0 如果你改變這個值為 2.0,動畫會用 2 倍的速度播放。 這樣的影響就是使持續(xù)時間減半碧浊。如果你指定的持續(xù)時間為 6 秒,速度為 2.0,動畫就會播放 3 秒鐘---一半的 持續(xù)時間 durationTime = speed * animationTime
下面粘上部分動畫效果代碼
//MARK: 組合動畫
func startGroupAnimation(animationView: UIView) -> Void {
//界限
let boundsAnimation = CABasicAnimation.init(keyPath: "bounds")
boundsAnimation.fromValue = NSValue.init(cgRect: testView.bounds)
boundsAnimation.toValue = NSValue.init(cgRect: CGRect.zero)
//透明度變化
let opacityAnimation = CABasicAnimation.init(keyPath: "opacity")
opacityAnimation.fromValue = NSNumber.init(value: 1.0)
opacityAnimation.toValue = NSNumber.init(value: 0.0)
// 位移變化
let animation = CABasicAnimation.init(keyPath: "position")
animation.fromValue = NSValue.init(cgPoint: testView.layer.position)
var toValue = testView.layer.position
toValue.x += 360
animation.toValue = NSValue.init(cgPoint: toValue)
//旋轉(zhuǎn)動畫
let rotationAnimation = CABasicAnimation.init(keyPath: "transform.rotation.z")
rotationAnimation.toValue = NSNumber.init(value: (2 * Double.pi) * 3)
rotationAnimation.duration = 3.0
rotationAnimation.autoreverses = true
rotationAnimation.repeatCount = MAXFLOAT
rotationAnimation.timingFunction = CAMediaTimingFunction.init(name: kCAMediaTimingFunctionEaseOut)
//縮放動畫
let scaleAnimation = CABasicAnimation.init(keyPath: "transform.scale")
scaleAnimation.fromValue = NSNumber.init(value: 0.0)
scaleAnimation.toValue = NSNumber.init(value: 1.0)
scaleAnimation.duration = 3.0
scaleAnimation.timingFunction = CAMediaTimingFunction.init(name: kCAMediaTimingFunctionEaseOut)
//組合動畫
let groupAnimation = CAAnimationGroup.init()
groupAnimation.duration = 3.0
groupAnimation.autoreverses = true
groupAnimation.repeatCount = Float(NSNotFound)
groupAnimation.animations = [boundsAnimation, rotationAnimation, scaleAnimation, animation, opacityAnimation]
animationView.layer.add(groupAnimation, forKey: "groupAnimation")
}