iOS動畫開發之二——UIView動畫執行的另一種方式
上一篇部落格中介紹了UIView的一些常用動畫,通過block塊,我們可以很友善簡潔的建立出動畫效果:
http://my.oschina.net/u/2340880/blog/484457,這篇部落格再介紹一種更加傳統的執行UIView的動畫的方法。
這種方式相比如block的方式,顯得要麻煩一些,apple官方也推薦我們使用帶block的建立動畫的方式,我們可以将程式設計重心更多的放在動畫邏輯的實作上。使用begin和commit方式主要分為三個步驟:
一、設定動畫開始
[UIView beginAnimations:@"test" context:nil];
這個函數中的兩個參數,第一個用于設定一個動畫的辨別id,通常第二個參數寫為nil。
二、動畫執行的參數設定
+ (void)setAnimationDelegate:(id)delegate;
設定這個動畫的代理,用于執行動畫開始或者結束後的動作
+ (void)setAnimationWillStartSelector:(SEL)selector;
設定動畫開始時執行的回調
+ (void)setAnimationDidStopSelector:(SEL)selector;
設定動畫結束後執行的回調
+ (void)setAnimationDuration:(NSTimeInterval)duration;
設定動畫執行的時間
+ (void)setAnimationDelay:(NSTimeInterval)delay;
設定延時執行的延時
+ (void)setAnimationStartDate:(NSDate *)startDate;
給動畫設定一個啟示時間
+ (void)setAnimationCurve:(UIViewAnimationCurve)curve;
設定動畫播放的線性效果,UIViewAnimationCurve的枚舉如下:
typedef NS_ENUM(NSInteger, UIViewAnimationCurve) {
UIViewAnimationCurveEaseInOut, // 淡入淡出
UIViewAnimationCurveEaseIn, // 淡入
UIViewAnimationCurveEaseOut, // 淡出
UIViewAnimationCurveLinear //線性
}
+ (void)setAnimationRepeatCount:(float)repeatCount;
設定動畫循環播放次數
+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses;
設定動畫逆向執行
三、送出動畫
+ (void)commitAnimations;
例如:
UIView * view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:view];
view.backgroundColor=[UIColor redColor];
[UIView beginAnimations:@"test" context:nil];
[UIView setAnimationDuration:3];
view.backgroundColor=[UIColor orangeColor];
[UIView commitAnimations];//執行commit後,動畫即開始執行
一點建議:這種建立UIView動畫的方式和上一篇部落格中的block方式效果相同,然而效率并不高,寫的代碼也會繁瑣冗長,在開發中,如果沒有特殊的相容要求,使用block的方式會更高效友善。