標籤:
Core Animation是一組非常強大的動畫處理API,使用它能做出非常炫麗的動 畫效果,而且往往是事半功倍!
1.開發步驟:
初始化一個動畫對象(CAAnimation)並設定一些動畫相關屬性
添加動畫對象到層(CALayer)中,開始執行動畫
Core Animation的動畫執行過程都是在後台操作的,不會阻塞主線程
2.Core Animation的主要類
提供顯示內容的圖層類:CALayer及其子類
動畫和計時類:CAAnimation及其子類、CAMediaTiming
布局和約束類:CAConstraint、CAConstraintLayoutManager
事務類,在原子更新的時候組合圖層類:CATransaction、CAActiontransition
3.CABasicAnimation基本動畫,是CAPropertyAnimation的子類
屬性說明:
fromValue:keyPath相應屬性的初始值
toValue:keyPath相應屬性的結束值
3.1動畫過程說明:
隨著動畫的進行,在長度為duration的期間內,keyPath相應屬性的值從fromValue 漸漸地變為toValue
keyPath內容是CALayer的可動畫Animatable屬性
如果fillMode=kCAFillModeForwards同時removedOnComletion=NO,那麼在動畫執 行完畢後,圖層會保持顯示動畫執行後的狀態。但在實質上,圖層的屬性值還是動畫執行前的 初始值,並沒有真正被改變。
上代碼:
// 1 CAanimation
//bounds transform
//KeyPath:指定layer的一個屬性值,通過修改該屬性值達到動畫的效果
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
//2 設定屬性
//1>動畫的起始值
animation.fromValue = @0.5;
//2>動畫的結束值
animation.toValue = @3;
//--------- CAMediaTiming----------
//3>動畫的期間
animation.duration = 3;
//4>自動回放 (多花一倍時間)
// animation.autoreverses = YES;
//5>動畫完成後移除動畫 (如果不移除動畫,需要和填充方式一起使用)
animation.removedOnCompletion = NO; //(預設是yes)
//6>填充方式
animation.fillMode = kCAFillModeForwards;
// animation.fillMode = kCAFillModeBackwards;
/*
kCAFillModeForwards:保留動畫結束後的效果
kCAFillModeBackwards:動畫開始之前,會提前進入動畫開始的效果(開延時才可以看出)
kCAFillModeBoth:2者都有
kCAFillModeRemoved:2者都沒有
*/
//7>beginTime:開始時間 (延遲一秒之後執行動畫)
// animation.beginTime = CACurrentMediaTime()+1;
//8>timeOffset 時間位移量 (開始執行第2秒的動畫,執行到指定的期間為止)
// animation.timeOffset = 2;
//9>repeatCount:重複次數
animation.repeatCount = 2;
//10>repeatDuration:重複的總時間 (如果和重複次數有衝突,遵循重複時間)
animation.repeatDuration =4;
//11>speed:動畫的速度 (和期間衝突)
animation.speed =.3;
//3 將動畫對象添加到layer上面
//key:標示
//animation對象在這copy一份;所以屬性要寫在添加之前
[self.myImageView.layer addAnimation:animation forKey:@"animation"];
核心動畫CABasicAnimation