天天看點

iOS開發UI篇—核心動畫(UIView封裝動畫)

一、uiview動畫(首尾)

1.簡單說明

uikit直接将動畫內建到uiview類中,當内部的一些屬性發生改變時,uiview将為這些改變提供動畫支援

執行動畫所需要的工作由uiview類自動完成,但仍要在希望執行動畫時通知視圖,為此需要将改變屬性的代碼放在[uiviewbeginanimations:nil context:nil]和[uiview commitanimations]之間

常見方法解析:

+ (void)setanimationdelegate:(id)delegate 設定動畫代理對象,當動畫開始或者結束時會發消息給代理對象

+ (void)setanimationwillstartselector:(sel)selector 當動畫即将開始時,執行delegate對象的selector,并且把beginanimations:context:中傳入的參數傳進selector

+ (void)setanimationdidstopselector:(sel)selector 當動畫結束時,執行delegate對象的selector,并且把beginanimations:context:中傳入的參數傳進selector

+ (void)setanimationduration:(nstimeinterval)duration 動畫的持續時間,秒為機關

+ (void)setanimationdelay:(nstimeinterval)delay 動畫延遲delay秒後再開始

+ (void)setanimationstartdate:(nsdate *)startdate 動畫的開始時間,預設為now

+ (void)setanimationcurve:(uiviewanimationcurve)curve 動畫的節奏控制

+ (void)setanimationrepeatcount:(float)repeatcount 動畫的重複次數

+ (void)setanimationrepeatautoreverses:(bool)repeatautoreverses 如果設定為yes,代表動畫每次重複執行的效果會跟上一次相反

+ (void)setanimationtransition:(uiviewanimationtransition)transition forview:(uiview *)view cache:(bool)cache 設定視圖view的過渡效果, transition指定過渡類型, cache設定yes代表使用視圖緩存,性能較好

2.代碼示例

iOS開發UI篇—核心動畫(UIView封裝動畫)
iOS開發UI篇—核心動畫(UIView封裝動畫)

執行結果:

iOS開發UI篇—核心動畫(UIView封裝動畫)
iOS開發UI篇—核心動畫(UIView封裝動畫)

列印動畫塊的位置:

iOS開發UI篇—核心動畫(UIView封裝動畫)

3.uiview封裝的動畫與calayer動畫的對比

使用uiview和calayer都能實作動畫效果,但是在真實的開發中,一般還是主要使用uiview封裝的動畫,而很少使用calayer的動畫。

calayer核心動畫與uiview動畫的差別:

uiview封裝的動畫執行完畢之後不會反彈。即如果是通過calayer核心動畫改變layer的位置狀态,表面上看雖然已經改變了,但是實際上它的位置是沒有改變的。

代碼示例:

iOS開發UI篇—核心動畫(UIView封裝動畫)
iOS開發UI篇—核心動畫(UIView封裝動畫)

列印結果:

iOS開發UI篇—核心動畫(UIView封裝動畫)

二、block動畫

+ (void)animatewithduration:(nstimeinterval)duration delay:(nstimeinterval)delay options:(uiviewanimationoptions)options animations:(void (^)(void))animations completion:(void (^)(bool finished))completion

參數解析:

duration:動畫的持續時間

delay:動畫延遲delay秒後開始

options:動畫的節奏控制

animations:将改變視圖屬性的代碼放在這個block中

completion:動畫結束後,會自動調用這個block

轉場動畫

+ (void)transitionwithview:(uiview *)view duration:(nstimeinterval)duration options:(uiviewanimationoptions)options animations:(void (^)(void))animations completion:(void (^)(bool finished))completion

view:需要進行轉場動畫的視圖

options:轉場動畫的類型

+ (void)transitionfromview:(uiview *)fromview toview:(uiview *)toview duration:(nstimeinterval)durationoptions:(uiviewanimationoptions)options completion:(void (^)(bool finished))completion

方法調用完畢後,相當于執行了下面兩句代碼:

// 添加toview到父視圖

[fromview.superview addsubview:toview];

// 把fromview從父視圖中移除

[fromview.superview removefromsuperview];

iOS開發UI篇—核心動畫(UIView封裝動畫)
iOS開發UI篇—核心動畫(UIView封裝動畫)
iOS開發UI篇—核心動畫(UIView封裝動畫)

提示:self.customview.layer.position和self.customview.center等價,因為position的預設值為(0.5,0.5)。

三、補充

1.uiimageview的幀動畫

uiimageview可以讓一系列的圖檔在特定的時間内按順序顯示

相關屬性解析:

animationimages:要顯示的圖檔(一個裝着uiimage的nsarray)

animationduration:完整地顯示一次animationimages中的所有圖檔所需的時間

animationrepeatcount:動畫的執行次數(預設為0,代表無限循環)

相關方法解析:

- (void)startanimating; 開始動畫

- (void)stopanimating; 停止動畫

- (bool)isanimating; 是否正在運作動畫

2.uiactivityindicatorview

是一個旋轉進度輪,可以用來告知使用者有一個操作正在進行中,一般用initwithactivityindicatorstyle初始化

方法解析:

uiactivityindicatorviewstyle有3個值可供選擇:

uiactivityindicatorviewstylewhitelarge //大型白色訓示器

uiactivityindicatorviewstylewhite //标準尺寸白色訓示器

uiactivityindicatorviewstylegray //灰色訓示器,用于白色背景