iOS動畫分為顯示動畫(keyFrameAnimation PropertyAnimation CATransaction)隱式動畫 CATransaction表示一個動畫事務,可以設置layer層的屬性,再結合CAAnimation即可實現動畫效果
class func textLayerAnimation(layer: CALayer, durationTime: TimeInterval, delay: TimeInterval, effectAnimationClosure: effectAnimationLayerClosure?,finishedClosure: completionClosure?) -> Void{
let animationObjct = TELayerAnimation()
DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
let oldLayer = animationObjct.animatableLayerCopy(layer: layer)
var newLayer: CALayer?
var animationGroup: CAAnimationGroup?
animationObjct.completionBlock = finishedClosure
if let effectAnimationClosure = effectAnimationClosure{
CATransaction.begin()
//關閉隱式動畫
CATransaction.setDisableActions(true)
newLayer = effectAnimationClosure(layer)
CATransaction.commit()
}
animationGroup = animationObjct.groupAnimationWithLayerChanges(old: oldLayer, new: newLayer!)
if let textAnimationGroup = animationGroup{
animationObjct.textLayer = layer
textAnimationGroup.timingFunction = CAMediaTimingFunction.init(name: kCAMediaTimingFunctionEaseInEaseOut)
textAnimationGroup.beginTime = CACurrentMediaTime()
textAnimationGroup.duration = durationTime
textAnimationGroup.delegate = animationObjct
layer.add(textAnimationGroup, forKey: textAnimationGroupKey)
}else{
if finishedClosure != nil{
finishedClosure!(true)
}
}
}
}