一、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.代碼示例


執行結果:
列印動畫塊的位置:
3.uiview封裝的動畫與calayer動畫的對比
使用uiview和calayer都能實作動畫效果,但是在真實的開發中,一般還是主要使用uiview封裝的動畫,而很少使用calayer的動畫。
calayer核心動畫與uiview動畫的差別:
uiview封裝的動畫執行完畢之後不會反彈。即如果是通過calayer核心動畫改變layer的位置狀态,表面上看雖然已經改變了,但是實際上它的位置是沒有改變的。
代碼示例:


列印結果:
二、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];


提示: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 //灰色訓示器,用于白色背景