【iOS】UIView 動畫部分

UIView實現動畫效果:

UIView類的很多屬性都設計爲動畫,動畫的屬性是指當屬性從一個值變成另外一個值時可以支持動畫,同時通知UIKit需要執行什麼樣類型的動畫,UIView對象支持動畫的屬性有如下幾個:

frame可以使用該屬性改變尺寸和位置

bounds改變尺寸

center改變視圖的位置

alpha改變視圖的透明度

backgroundColor改變視圖的背景

contentStretch改變視圖內容如何拉伸

1Core Animation方法

IOS封裝了Core Animation來是實現動畫,Core Animation的最大好處是可以幫助Mac或者iPhone的開發者減少代碼量。因爲如果你想用Core Image或者Open GL實現界面的動畫特效,其實也是可以的,主要是非常麻煩。而用Core Animation可以極大簡化開發難度和減少代碼量,IOS提供的核心動畫編程接口,可以讓編程人員以非常簡單的方式實現炫目流暢的動畫效果

翻轉的動畫 

 [UIViewbeginAnimations:@"wap view" context:nil]; //開始動畫

 [UIViewsetAnimationDuration:1];  //設置時常

 [UIViewsetAnimationCurve:UIViewAnimationCurveEaseInOut]; //設置動畫淡入淡出

 [UIViewsetAnimationDelegate:self]; //設置代理

 [UIViewsetAnimationTransition: UIViewAnimationTransitionFlipFromLeft  forView:manImageView cache:YES]; //設置翻轉方向

 [UIViewcommitAnimations];  //動畫結束

旋轉動畫

創建一個CGAffineTransform transform對象 CGAffineTransform transform;

transform =CGAffineTransformRotate(manImageView.transform,M_PI/6.0); //設置旋轉度數

 [UIViewbeginAnimations:@"rotate" context:nil ];  //動畫開始

 [UIViewsetAnimationDuration:2]; //動畫時常

 [UIViewsetAnimationDelegate:self]; //添加代理

 [manImageViewsetTransform:transform];  //獲取transform的值

 [UIViewcommitAnimations]; //關閉動畫

偏移動畫

[UIView beginAnimations:@"move" context:nil];

[UIView setAnimationDuration:2];

[UIView setAnimationDelegate:self] //改變它的framex,y的值 manImageView.frame=CGRectMake(100,100, 120,100);

[UIView commitAnimations];

翻頁動畫

[UIView beginAnimations:@"curlUp" context:nil];

[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//指定動畫曲線類型,該枚舉是默認的,線性的是勻速的

//設置動畫時常 [UIViewsetAnimationDuration:1];

[UIView setAnimationDelegate:self]; //設置翻頁的方向

[UIView setAnimationTransition:UIViewAnimationTransitionCurlUpforView:manImageView cache:YES];

 [UIViewcommitAnimations]; //關閉動畫

縮放動畫

CGAffineTransform transform;

transform =CGAffineTransformScale(manImageView.transform,1.2,1.2);

[UIView beginAnimations:@"scale" context:nil];

[UIView setAnimationDuration:2];

[UIView setAnimationDelegate:self];

[manImageView setTransform:transform];

[UIView commitAnimations];

取反的動畫效果是根據當前的動畫取他的相反的動畫

CGAffineTransform transform;

transform=CGAffineTransformInvert(manImageView.transform);

[UIView beginAnimations:@"Invert" context:nil];

[UIView setAnimationDuration:2];//動畫時常

[UIView setAnimationDelegate:self];

[manImageView setTransform:transform];//獲取改變後的viewtransform [UIViewcommitAnimations];//關閉動畫

(2)Block方法實現的動畫(即animateWithDuration方法)

 [UIViewanimateWithDuration:<#(NSTimeInterval)#>animations:<#^(void)animations#>];

[UIViewanimateWithDuration:<#(NSTimeInterval)#>animations:<#^(void)animations#> completion:<#^(BOOLfinished)completion#>];

[UIView animateWithDuration:<#(NSTimeInterval)#>delay:<#(NSTimeInterval)#> options:<#(UIViewAnimationOptions)#>animations:<#^(void)animations#> completion:<#^(BOOLfinished)completion#>];

l  duration爲動畫持續的時間

l  animations爲動畫效果的代碼塊

l  completion爲動畫執行完畢以後執行的代碼塊

l  options爲動畫執行的選項。可以參考這裏

l  delay爲動畫開始執行前等待的時間


比如一:從屏幕下部往上漸漸彈出一個圖片

  1. -(void) fadeIn  
  2. {     
  3.     CGRect rect = [[UIScreen mainScreen] bounds];  
  4.       self.view.center = CGPointMake(rect.size.width/2, 720);  
  5.     [UIView animateWithDuration:0.5f animations:^{  
  6.          self.view.center = CGPointMake(rect.size.width/2, 240+10);    
  7.     } completion:^(BOOL finished) {  
  8.      //   [imageView setImageURL:[NSURL URLWithString:imgUrl]];  
  9.     }];  
比如二:再漸漸退回去

  1. -(void) fadeOut  
  2. {  
  3.     CGRect rect = [[UIScreen mainScreen] bounds];  
  4.     [UIView animateWithDuration:0.5f animations:^{  
  5.         self.view.center = CGPointMake(rect.size.width/2, 720);  
  6.     } completion:^(BOOL finished) {  
  7.         [imageView cancelImageLoad];  
  8.         [imageView release];  
  9.         //[imgUrl release];  
  10.        // imageView = nil;  
  11.         //imgUrl = nil;  
  12.        // [self.view removeFromSuperview];  
  13.     }];  
  14. }  


發佈了14 篇原創文章 · 獲贊 5 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章