IOS動畫學習

liyan5953wow發表於2012-03-30

UIView簡單動畫

	//開始一個動畫塊 
	[UIView beginAnimations:@"View1" context:nil];
	//設定是否啟用動畫
	[UIView setAnimationsEnabled:YES];
	//設定在動畫塊內部動畫屬性改變開始的時間
	[UIView setAnimationStartDate:(NSDate*)startTime];
	//設定動畫塊中的動畫持續時間(用秒) 
	[UIView setAnimationDuration:0.5];
	//設定動畫塊中的動畫屬性變化的曲線  
        //UIViewAnimationCurveEaseInOut  開始和結束時動畫效果比較慢
        //UIViewAnimationCurveEaseIn       開始動畫效果比較慢
        //UIViewAnimationCurveEaseOut     結束動畫效果比較慢
       //UIViewAnimationCurveLinear         平滑的動畫效果        
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];	
	//設定動畫塊中的動畫效果是否自動重複播放
	[UIView setAnimationRepeatAutoreverses:NO];
	//設定動畫在動畫模組中的重複次數 
	[UIView setAnimationRepeatCount:5];
	//設定動畫從當前狀態開始
	[UIView setAnimationBeginsFromCurrentState:YES];
	//設定動畫訊息的代理
	[UIView setAnimationDelegate:self];
	//設定訊息給動畫代理當動畫開始的時候
	[UIView setAnimationWillStartSelector:@selector(resizeAnimationWillStart:context)];
	//設定訊息給動畫代理當動畫停止的時候
	[UIView setAnimationDidStopSelector:@selector(resizeAnimationDidStop:finished:context)];
	//在動畫塊中為檢視設定過渡
	[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
	
	//顯示在最前面
	[self.view exchangeSubviewAtIndex:1 withSubviewAtIndex:0]; 
	
	//結束動畫 
	[UIView commitAnimations];

頁面之間的過度主要依靠UIView setAnimationTransition: forView:cache: 這個方法以及exchangeSubviewAtIndex:withSubviewAtIndex:
前者通過UIView靜態方法設定過度的動畫種類,後者實現真正的過度函式掉用.種類有如下五種:
typedef enum {
    UIViewAnimationTransitionNone,
    UIViewAnimationTransitionFlipFromLeft,
    UIViewAnimationTransitionFlipFromRight,
    UIViewAnimationTransitionCurlUp,
    UIViewAnimationTransitionCurlDown,
} UIViewAnimationTransition;

一個捲入卷出的小例子

	if (tag == 0) {
		//在動畫塊中為檢視設定過渡
		[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:viewOne cache:YES];
		viewOne.hidden = YES;
	}else {
		//在動畫塊中為檢視設定過渡
		[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:viewOne cache:YES];
		viewOne.hidden = NO;
	}


*另外所有的CGAffineTransform都可以放置在動畫塊中,動畫塊會自動為仿射變化生成動畫



Core Animation


除了這種簡單的動畫方式外,其實還有一種利用QuartzCore來做過度動畫.不同的地方在於,這個過度動畫作用於層,換句話說,他動畫直接做用於整個UIView,而不像UIView的動畫,可以作用於UIView區域性或本身.當UIView作用與本身時,實際上也就相當於是對層的動畫了.

	CATransition *animation = [CATransition animation];
	[animation setDelegate:self];
	[animation setDuration:1.0f];
	[animation setTimingFunction:UIViewAnimationCurveEaseInOut];
	[animation setType: kCATransitionMoveIn];
	[animation setSubtype: kCATransitionFromBottom];
	
	
	[[self superview] exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
	[[[self superview] layer] addAnimation:animation forKey:@"transitionViewAnimation"];	

setDuration:和UIView中的動畫效果一樣,持續時間.

setTimingFunction:是動畫的種類,和UIView一樣,比如勻速動畫,快速開始結束等.

setType:是指定動畫的型別,他有:

 

  1. kCATransitionFade (淡入淡出來補給動畫)
  2. kCATransitionMoveIn(從一個方向覆蓋的方式來補給動畫)
  3. kCATransitionPush(推送的方式來補給動畫)
  4. kCATransitionReveal(一個試圖展現出另外另外一個試圖的方式)
當除了第一種方式外(淡入淡出),可以通過setSubType:來制定動畫的方向(因為這些動畫都是直接著用於層的,所以相當於只有試圖間的切換過渡).動畫方向有4個:
  1. kCATransitionFromRight
  2. kCATransitionFromLeft
  3. kCATransitionFromTop
  4. kCATransitionFromBottom



相關文章