core animation動畫概述
1、概述
在ios中,圖形可分為以下幾個層次:
越上層,封裝程度越高,動畫實現越簡潔越簡單,但是自由度越低。本文著重介紹core animation層的動畫實現方案。
2、動畫概念類
在ios中,展示動畫可以模擬於顯示生活中的「拍電影」。拍電影有三大要素:演員+劇本+開拍,概念模擬如下:
演員--->calayer,規定電影的主角是誰
劇本--->caanimation,規定電影該怎麼演,怎麼走,怎麼變換
開拍--->addanimation,開始執行
1)、caanimation是什麼呢?
caanimation是抽象類,定義了動畫中「事務」遵循的規則。caanimation遵循camediatiming協議和caaction協議,camediatiming協議用於調整時間,包括持續時間,速度,重複次數等;caaction協議通過響應動作的方式來顯示動畫。
2)、caanimation子類可分為四種:
(1)、cabasicanimation
通過設定起始點,終點,時間,動畫會沿著你這設定點進行移動。可以看做特殊的cakeyframeanimation。對單一屬性提供動畫支援!
(2)、cakeyframeanimation
關鍵楨動畫,可以定義行動路線,你可以通過設定calayer的始點、中間關鍵點、終點的frame,時間,動畫會沿你設定的軌跡進行移動。
(3)、caanimationgroup
group也就是組合的意思,就是把對這個layer的所有動畫都組合起來。ps:乙個layer設定了很多動畫,他們都會同時執行,如何按順序執行我到時候再講。
(4)、catransition
提供漸變效果,用在「顯式動畫」中時可以實現「過渡動畫」!
(5)、catransaction
事務類,可以對多個layer的屬性同時進行修改。
(6)、caconstraint
約束類,在布局管理器類中用它來設定屬性。
(7)、caconstraintlayoutmanager
約束布局管理器,是用來將多個calayer進行布局。各個calayer是通過名稱來區分,而布局屬性是通過caconstraint來設定的。
3)、caanimation類常用屬性和函式說明:
(1)、@property(retain) id delegate//caanimation例項不能設定delegate為self,會引起迴圈引用。
(2)、@property(getter=isremovedoncompletion) bool removedoncompletion//設定是否動畫完成後,動畫效果從設定的layer上移除,預設為yes。
(3)、@property(retain) camediatimingfunction *timingfunction//設定動畫的「時機」效果,就是動畫自身的「節奏」:比如:開始快,結束時變慢;開始慢,結束時變快;勻速;等。
(4)、speed:執行速度,如果速度為2,則乙個10秒的duration,則只需要5秒完成。
(5)、repeatcount|repeatduration:重複的次數和重複的間隔 ,如果repeatcount設定成 1e100f則無限重複
(6)、fillmode:決定動畫結束時候的狀態。要和removeoncompletion引數一起設定才有效。動畫結束後的狀態並沒有影響layer的位置,其實layer還在原來的地方沒變。
此外還有duration,begintime,timeoffset
(7)、autoreverses:當動畫執行到tovalue指定的狀態時是否從tovalue的狀態逆回去
(8)、+ (id)animation//建立並返回乙個caanimation例項。
(9)、+ (id)defaultvalueforkey:(nsstring *)key//根據屬性key,返回相應的屬性值。
(10)、- (bool)shouldarchivevalueforkey:(nsstring *)key//返回指定的屬性值是否可以歸檔。key:指定的屬性。yes:指明該屬性可以被歸檔;no:不能被歸檔。
caanimation協議方法
(11)、- (void)animationdidstart:(caanimation *)theanimation//動畫開始時,執行的方法。theanimation:正在執行動畫的caanimation例項。
(12)、- (void)animationdidstop:(caanimation *)theanimation finished:(bool)flag//動畫執行完成或者動畫為執行被刪除時,執行該方法。theanimation:完成或者被刪除的動畫例項;flag:標誌該動畫是執行完成或者被刪除,yes:執行完成;no:被刪除。
cabasicanimation想要實現不同的效果,最關鍵的地方在於cabasicanimation物件的初始化方式中keypath的設定。在ios中有以下幾種不同的keypath,代表著不同的效果:
二、顯式動畫舉例
實踐出真知,看個例子就知道:比如我們想實現乙個類似心跳的縮放動畫可以這麼做,分為演員初始化、設定劇本、電影開拍三個步驟:
- (void)initscalelayer
**中有如下幾個引數需要解釋一下:
keypath:決定基礎動畫的型別,該值不能隨便設定,一旦設定錯誤就達不到想要的效果。要改變位置就設定position相關,要改變透明度就設定opacity相關,,要等比縮放就設定transform.scale
fromvalue:動畫的起始狀態,雖然ios文件給出的是id,不過這裡應該傳nsvalue物件,比如nsnumber
autoreverses:當動畫執行到tovalue指定的狀態時是否從tovalue的狀態逆回去
filemode:參考**
對於cakeyframeanimation來說,一般用於移動複雜的位置,即
keypath:@
"position」。如果
values
是cgimage,key-path是"contents"的話,則是影象切換;如果
values
是catransform3d的,key-path是「transform」,則是變換座標。
不要針對
frame
和size
等引數設定
keyframe
動畫,似乎沒有效果。
position
是可以的。
IOS動畫Core Animation詳解
在ios中如果使用普通的動畫則可以使用uikit提供的動畫方式來實現,如果想實現更複雜的效果,則需要使用core animation了。下面詳解各種型別動畫的使用方式 plain view plain copy void animationofuikit plain view plain copy ...
IOS動畫Core Animation詳解
在ios中如果使用普通的動畫則可以使用uikit提供的動畫方式來實現,如果想實現更複雜的效果,則需要使用core animation了。下面詳解各種型別動畫的使用方式 plain view plain copy void animationofuikit plain view plain copy ...
IOS動畫Core Animation詳解
在ios中如果使用普通的動畫則可以使用uikit提供的動畫方式來實現,如果想實現更複雜的效果,則需要使用core animation了。下面詳解各種型別動畫的使用方式 plain view plain copy void animationofuikit plain view plain copy ...