核心動畫:併發
在iOS中核心動畫分爲幾類:基礎動畫、關鍵幀動畫、動畫組、轉場動畫 各個類的關係如個人截圖函數
CAAnimation:核心動畫的基礎類,不能直接使用,負責動畫運行時間、速度的控制,自己實現了CAMediaTiming協議。動畫
CAPropertyAnimation:屬性動畫的基類(經過屬性進行動畫設置,注意是動畫屬性),不能直接使用。設計
CABasicAnimation:基礎動畫,經過屬性修改進行動畫參數控制,只有初始狀態和結束狀態。orm
CAKeyframeAnimation:關鍵幀動畫,一樣是經過屬性進行動畫參數控制,可是同基礎動畫不一樣的是它能夠有多個狀態控制。對象
CAAnimationGroup:動畫組,動畫組是一種組合模式設計,能夠經過動畫組來進行全部動畫行爲的統一控制,組中全部動畫效果能夠併發執行。ci
CATransition:轉場動畫,主要經過濾鏡進行動畫效果設置。開發
基礎動畫、關鍵幀動畫都屬於屬性動畫,就是經過修改屬性值產生動畫效果,開發人員只須要設置初始值和結束值,中間的過程動畫(又叫「補間動畫」)由系統自動計算產生。和基礎動畫不一樣的是關鍵幀動畫能夠設置多個屬性值,每兩個屬性中間的補間動畫由系統自動完成,所以從這個角度而言基礎動畫又能夠當作是有兩個關鍵幀的關鍵幀動畫rem
---------------------------------------animation
本節主要講基礎動畫CABasicAnimation
CAAnimation 他自己也是一個抽象類,若是想使用動畫,就必須使用他的子類
他有兩個子類:
CABasicAnimation 基礎動畫
CAKeyframeAnimation 關鍵幀動畫
她倆的區別:CABasicAnimation只能從一個數值(fromValue)變到另外一個數值(toValue),而CAKeyframeAnimation會使用一個NSArray保存這些數值
CABasicAnimation :
建立基礎動畫 須要經過fromValue 和toValue 屬性來指定一個開始值和結束值 當添加基礎動畫到層中的時候,它開始變化
autoreverses:當設定這個屬性爲 YES 時,在它到達目的地以後,會以動畫的方式返回到開始的值
duration 設定開始值到結束值花費的時間 期間會被速度的屬性影響
speed 默認的值爲 1.0.這意味着動畫播放按照默認的速度。若是你改變這個值爲 2.0,動畫會用 2 倍的速度播放。 這樣的影響就是使持續時間減半。若是你指定的持續時間爲 6 秒,速度爲 2.0,動畫就會播放 3 秒鐘---一半的 持續時間
把速度設置成0 就能夠暫停動畫
beginTime 這個屬性在組動畫中頗有用。它根據父動畫組的持續時間,指定了開始播放動畫的時間。默認的是 0.0.
timeOffset 若是一個時間偏移量是被設定,動畫不會真正的可見,直到根據父動畫組中的執行時間獲得的時間都流逝了
repeatCount 默認的是 0,意味着動畫只會播放一次 這個不該該和 repeatDration 屬性一塊使用。
repeatDuration 這個屬性指定了動畫應該被重複多久。動畫會一直重複,直到設定的時間流逝完。它不該該和 repeatCount 一塊兒使用
timingFunction 速度控制函數,控制動畫運行的節奏
timingFunction 屬性值:
kCAMediaTimingFunctionLinear(線性):勻速,給你一個相對靜態的感受
kCAMediaTimingFunctionEaseIn(漸進):動畫緩慢進入,而後加速離開
kCAMediaTimingFunctionEaseOut(漸出):動畫全速進入,而後減速的到達目的地
kCAMediaTimingFunctionEaseInEaseOut(漸進漸出):動畫緩慢的進入,中間加速,而後減速的到達目的地。這個是默認的動畫行爲。
removedOnCompletion 默認爲YES,表明動畫執行完畢後就從圖層上移除,圖形會恢復到動畫執行前的狀態。若是想讓圖層保持顯示動畫執行後的狀態,那就設置爲NO,不過還要設置fillMode爲kCAFillModeForwards
fillMode 設置當前對象在非活動時間段的行爲 好比動畫開始以前或者動畫結束以後
fillMode屬性值(上面提到過 要想fillMode有效,須要設置removedOnCompletion = NO)
kCAFillModeRemoved 這個是默認值,也就是說當動畫開始前和動畫結束後,動畫對layer都沒有影響,動畫結束後,layer會恢復到以前的狀態
kCAFillModeForwards 當動畫結束後,layer會一直保持着動畫最後的狀態
kCAFillModeBackwards 在動畫開始前,只須要將動畫加入了一個layer,layer便當即進入動畫的初始狀態並等待動畫開始。
kCAFillModeBoth 這個其實就是上面兩個的合成.動畫加入後開始以前,layer便處於動畫初始狀態,動畫結束後layer保持動畫最後的狀態
能夠經過改變animationWithKeyPath來改變更畫的屬性:
transform.scale = 比例轉換
transform.scale.x
transform.scale.y
transform.rotation.z
opacity = 透明度
zPosition
backgroundColor 背景顏色
cornerRadius 圓角
borderWidth
bounds
contents
contentsRect
cornerRadius
frame
hidden
mask
masksToBounds
opacity
position
shadowColor
shadowOffset
shadowOpacity
shadowRadius