Core Animation動畫概述

2021-07-12 07:15:11 字數 3321 閱讀 3811

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 ...