天天看點

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

CAKeyframeAnimation——關鍵幀動畫

關鍵幀動畫,也是CAPropertyAnimation的子類,與CABasicAnimation的差別是:

–CABasicAnimation隻能從一個數值(fromValue)變到另一個數值(toValue),而CAKeyframeAnimation會使用一個NSArray儲存這些數值

屬性說明:

–values:上述的NSArray對象。裡面的元素稱為“關鍵幀”(keyframe)。動畫對象會在指定的時間(duration)内,依次顯示values數組中的每一個關鍵幀

–path:可以設定一個CGPathRef、CGMutablePathRef,讓圖層按照路徑軌迹移動。path隻對CALayer的anchorPoint和position起作用。如果設定了path,那麼values将被忽略

–keyTimes:可以為對應的關鍵幀指定對應的時間點,其取值範圍為0到1.0,keyTimes中的每一個時間值都對應values中的每一幀。如果沒有設定keyTimes,各個關鍵幀的時間是平分的

CABasicAnimation可看做是隻有2個關鍵幀的CAKeyframeAnimation

具體的關鍵幀執行個體如下:

執行個體一:設定改變的屬性值為透明度opacity,觸摸螢幕時,動畫開始執行,動畫執行過程中,動畫的透明度逐漸變淺.結束時透明度恢複原狀。

代碼如下:

//聲明屬性

//建立核心動畫子層

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

//處理觸摸事件

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

示範結果:

開始時:                              中間某一時刻:                   結束時:

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

執行個體二:設定改變的屬性值為位置position,當在螢幕上連續觸摸5個點時,動畫開始按照這個5個點的連接配接直線運作。等到結束時,動畫就停在最終的位置上,不在恢複原狀。

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

//觸摸事件的處理(如果觸摸次數不夠5次,就存儲起來,達到5次時,建立幀動畫,并開始動畫)

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

//實作動畫的協定方法

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

示範結果:點選5次後,運動過程不好捕捉,就不截圖了

起點:                                                         終點: 

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

執行個體三:設定改變的屬性值為位置position,在螢幕上繪制一條線,繪制結束後,動畫就沿着這條線開始動畫。等到結束時,動畫就停在最終的位置上,不在恢複原狀。

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

//建立兩個核心動畫子層,一個用來繪制運作線路,另一個用來當作動畫層

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

//處理觸摸點選事件,設定繪制線路徑的起點

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

//處理觸摸移動事件,繪制一條路徑線到終點,此時繪圖子層調用setNeedDisplay方法繪圖

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

//處理觸摸結束事件,繪制線路徑結束後,建立幀動畫,設定相關屬性并執行動畫

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

//實作幀動畫協定方法,動畫結束後,釋放繪制路徑

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

//重寫繪圖子層的繪圖方法-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx,繪圖子層代理會調用它繪圖

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

運作結果如下:隻給出起始位置和結束位置截圖,動畫過程不好捕捉,就不給出截圖了

開始時位置:                                                  繪制路徑後,動畫沿路徑運作結束位置:

iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation
iOS:核心動畫之關鍵幀動畫CAKeyframeAnimation

程式猿神奇的手,每時每刻,這雙手都在改變着世界的互動方式!

本文轉自當天真遇到現實部落格園部落格,原文連結:http://www.cnblogs.com/XYQ-208910/p/4886488.html,如需轉載請自行聯系原作者

繼續閱讀