iphone開發動畫說明

有五個函數

Animating Views with Blocks


這三個函數,用來支持多個不同的view(view1,view2。。。。。。)的動畫
Animate changes to one or more views
這個函數,用來對一個容器view的一個動畫進行操作,這個容器內的所有subview將一起動畫

這個函數,用來對一個容器view的多個subview進行動畫,容器view中的FromViewtoView的切換等動畫
比如:subview1翻轉後顯示subview2
options的選項:
看下面代碼中的註釋:

  1. - (NSInteger)animationOption: (NSInteger)index {  
  2.     NSInteger type = 0;  
  3.     switch (index) {  
  4.         case 0: {// 跟父類作爲一個整體一起動畫,此方式爲默認方式  
  5.             type = UIViewAnimationOptionLayoutSubviews;  
  6.             break;  
  7.         }  
  8.         case 1: {// 在動畫運行過程中,允許用戶與之交互操作  
  9.             /* 
  10.              注意1,UIViewAnimationOptionAllowUserInteraction只是說允許用戶點擊,但在動畫過程中, 
  11.              比如一個讓btnOne從(0,0)移動到(100,0)的動畫,在動畫播放的過程中其實btnOne的座標已經是(100,0)了 你點擊在view上顯示的btn是沒辦法獲取響應的,你需要在(100,0)處進行點擊才能讓btnOne響應你的點擊事件。 
  12.              解決這個問題的一種方法就是用定時器不斷刷,把動畫微分化: 
  13.              - (void)viewDidLoad 
  14.              { 
  15.                 _btnMove = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
  16.                 [_btnMove addTarget:self action:@selector(btnMoveDidSelect) forControlEvents:UIControlEventTouchUpInside]; 
  17.                 _btnMove.frame = CGRectMake(0, 0, 80, 40); 
  18.                 [_btnMove setTitle:@"touch me!" forState:UIControlStateNormal]; 
  19.                 [self.view addSubview:_btnMove]; 
  20.                 [NSTimer scheduledTimerWithTimeInterval:0.01f target:self selector:@selector(buttonMoved) userInfo:nil repeats:YES]; 
  21.                 [super viewDidLoad]; 
  22.                 return; 
  23.              } 
  24.               
  25.              - (void)buttonMoved 
  26.              { 
  27.                 if(_btnMove.frame.origin.x != 250) 
  28.                 { 
  29.                     [UIView beginAnimati*****:nil context:nil]; 
  30.                     [UIView setAnimationDuration:0.01f]; 
  31.                     [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
  32.                     [_btnMove setFrame: CGRectMake(_btnMove.frame.origin.x+1, _btnMove.frame.origin.y,_btnMove.frame.size.width, _btnMove.frame.size.height)]; 
  33.                     [UIView commitAnimati*****]; 
  34.                 } 
  35.              } 
  36.               
  37.              注意2:如果你設置了UIViewAnimationOptionAllowUserInteraction,界面上其他的button等控件可以接受事件,但是你不設置UIViewAnimationOptionAllowUserInteraction,其他的控件事件都收不到。也就是說如果設置了UIViewAnimationOptionAllowUserInteraction,在動畫期間,主線程會有時間接受事件。 
  38.              */  
  39.             type = UIViewAnimationOptionAllowUserInteraction;  
  40.             break;  
  41.         }  
  42.         case 2: {// 從當前狀態開始動畫。例如如下代碼  
  43.             /* 
  44.              - (void)doAnimation1 { 
  45.                 [UIView animateWithDuration:5.0 
  46.                                       delay:0.0 
  47.                                     options:nil 
  48.                 animations:^{ 
  49.                     self.firstView.frame = CGRectMake(0, 0, 200, 200); 
  50.                     [self performSelector:@selector(doAnimation2) withObject:nil afterDelay:1]; 
  51.                 } 
  52.                 completion:^(BOOL finished){}]; 
  53.             } 
  54.               
  55.              - (void)doAnimation2 { 
  56.                 [UIView animateWithDuration:5.0 
  57.                                       delay:0.0 
  58.                                     options:UIViewAnimationOptionBeginFromCurrentState 
  59.                 animations:^{ 
  60.                     self.firstView.frame = CGRectMake(660, 660, 200, 200); 
  61.                 } 
  62.                 completion:^(BOOL finished){}]; 
  63.             } 
  64.              當5秒的doAnimation1動畫運行1秒後,開始doAnimation2動畫(doAnimation2設定了UIViewAnimationOptionBeginFromCurrentState參數),則doAnimation2的動畫是從doAnimation1運行到1秒的狀態爲開始狀態繼續運行。如果不傳入這個參數,則doAnimation2的開始狀態爲doAnimation1完整運行結束後的狀態。 
  65.              */  
  66.             type = UIViewAnimationOptionBeginFromCurrentState;  
  67.             break;  
  68.         }  
  69.         case 3: {// 重複執行一個動畫,從初始狀態到結束狀態,然後瞬間跳到初始狀態繼續無限次的執行同一動作  
  70.             type = UIViewAnimationOptionRepeat;  
  71.             break;  
  72.         }  
  73.         case 4: {// 反向執行一個動畫。當動畫執行完一遍後,沿原路徑反向執行一遍。這個屬性必須跟UIViewAnimationOptionRepeat一起使用  
  74.             type = UIViewAnimationOptionAutoreverse;  
  75.             break;  
  76.         }  
  77.         case 5: {// 忽略子層嵌套的動畫的時間間隔。例如如下代碼  
  78.             /* 
  79.              [UIView transitionWithView:self.firstView duration:4.f options:nil animations:^{ 
  80.               
  81.                     self.firstView.frame = CGRectMake(0, 0, 200, 200);  
  82.               
  83.                     [UIView transitionWithView:self.firstView duration:1.f options:nil animations:^{ 
  84.               
  85.                             self.secondView.frame = CGRectMake(0, 0, 200, 200);        
  86.               
  87.                     } completion:^(BOOL finished) {}]; 
  88.              } completion:^(BOOL finished) {}]; 
  89.              self.firstView的動畫時間是4秒,self.secondView的動畫時間是1秒, 
  90.              如果子層不設置UIViewAnimationOptionOverrideInheritedDuration(如父層和子層都是nil), 
  91.              則子層默認繼承父層的時間,忽略自己的時間。 
  92.               
  93.              若是子層設置UIViewAnimationOptionOverrideInheritedDuration屬性, 
  94.              則子層將按照自身設置的1秒的時間執行。 
  95.              */  
  96.             type = UIViewAnimationOptionOverrideInheritedDuration;  
  97.             break;  
  98.         }  
  99.         case 6: {// 忽略子層嵌套的動畫屬性的時間 (如UIViewAnimationOptionCurveEaseInOut) 同上  
  100.             type = UIViewAnimationOptionOverrideInheritedCurve;  
  101.             break;  
  102.         }  
  103.         case 7: {// 允許同一個view的多個動畫同時進行  
  104.             type = UIViewAnimationOptionAllowAnimatedContent;  
  105.             break;  
  106.         }  
  107.         case 8: {// 控制兩個subview的顯示和隱藏  
  108.             /* 
  109.              控制兩個subview的顯示和隱藏(功能類似於addsubview和removefromsuperview),使用這個屬性(一般在transitionFromView:toView:duration:options:completion:這個方法中使用),FromView會被隱藏,toView會被顯示 
  110.               
  111.              - (void)viedDidLoad{ 
  112.                 [self.secondView removeFromSuperview]; 
  113.                 UIView *containerView = [[UIView alloc] initWithFrame:self.firstView.frame]; 
  114.                 self.firstView.frame = containerView.bounds; 
  115.                 self.secondView.frame = containerView.bounds; 
  116.                 [containerView addSubview:self.secondView]; 
  117.                 [containerView addSubview:self.firstView]; 
  118.                 [self.view addSubview:containerView]; 
  119.               
  120.                 [super viewDidLoad]; 
  121.              } 
  122.               
  123.              - (void)animation { 
  124.                 [UIView transitionFromView:self.firstView toView:self.secondView duration:2.f options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews completion:^(BOOL finished) {}]; 
  125.              } 
  126.               
  127.              */  
  128.             type = UIViewAnimationOptionShowHideTransitionViews;  
  129.             break;  
  130.         }  
  131.             // ========= 動畫過渡動作的速度  
  132.         case 9: {// 先慢後快再慢  
  133.             type = UIViewAnimationOptionCurveEaseInOut;  
  134.             break;  
  135.         }  
  136.         case 10: {// 先慢後快  
  137.             type = UIViewAnimationOptionCurveEaseIn;  
  138.             break;  
  139.         }  
  140.         case 11: {// 先快後慢  
  141.             type = UIViewAnimationOptionCurveEaseOut;  
  142.             break;  
  143.         }  
  144.         case 12: {// 勻速  
  145.             type = UIViewAnimationOptionCurveLinear;  
  146.             break;  
  147.         }  
  148.             // ========= 動畫過渡過程的方式:  
  149.         case 13: {// 不指定方式  
  150.             type = UIViewAnimationOptionTransitionNone;  
  151.             break;  
  152.         }  
  153.         case 14: {// 翻轉  
  154.             type = UIViewAnimationOptionTransitionFlipFromLeft;  
  155.             break;  
  156.         }  
  157.         case 15: {// 翻轉  
  158.             type = UIViewAnimationOptionTransitionFlipFromRight;  
  159.             break;  
  160.         }  
  161.         case 16: {// 翻轉  
  162.             type = UIViewAnimationOptionTransitionFlipFromTop; // 5.0以後  
  163.             break;  
  164.         }  
  165.         case 17: {// 翻轉  
  166.             type = UIViewAnimationOptionTransitionFlipFromBottom;// 5.0以後  
  167.             break;  
  168.         }  
  169.         case 18: {// 重疊,當一個view從一個位置到另一個位置時,當前的view會由透明狀態逐漸顯示到目的位置,原來的位置將會保留一個影子,並逐漸消失  
  170.             type = UIViewAnimationOptionTransitionCrossDissolve;// 5.0以後  
  171.             break;  
  172.         }  
  173.         case 19: {// 翻頁  
  174.             type = UIViewAnimationOptionTransitionCurlUp;  
  175.             break;  
  176.         }  
  177.         case 20: {// 翻頁  
  178.             type = UIViewAnimationOptionTransitionCurlDown;  
  179.             break;  
  180.         }  
  181.         default:  
  182.             break;  
  183.     }  
  184.       
  185.     return type;  
  186. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章