2012-02-19 79 views
1

分離我有一個應用程序用一個簡單的UIView。在此UIview上有一個矩陣NxN UIImageViews動畫中的iOS

我想將每個UIImageView的。但一個接一個。我試過這個代碼:

for (int k=0; k<kol; k++) 
     for (int l=0; l<kol; l++) 
     { 
      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationDuration:0.3]; 
       int posTo = pole[k][l].position ; 
       pole[k][l].position++; 
       if (posTo == 4) {posTo=0; pole[k][l].position=1;} 
       pole[k][l].imageView.transform = CGAffineTransformMakeRotation(1.57079633*posTo); 
      [UIView commitAnimations]; 
     } 

但是所有圖像都在同一時間旋轉。

我應該如何分開這個動畫?

UPD

現在,我使用此代碼對更復雜的動畫:

-(void) turnAllPole 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; 
    [UIView setAnimationDelay:delay]; 
    for (int k=0; k<kol; k++) 
     for (int l=0; l<kol; l++) 
     { 
      if (poleBeforeTurn[k][l] == 1) 
      { 
       int posTo = pole[k][l].position ; 
       pole[k][l].position++; 
       if (posTo == 4) {posTo=0; pole[k][l].position=1;} 
       pole[k][l].imageView.transform = CGAffineTransformMakeRotation(1.57079633*posTo); 
      }  
     } 
    [UIView commitAnimations]; 
    delay += 0.3; 
} 

這對一些矩陣」部分(其中poleBeforeTurn[k][l] == 1)的同步旋轉。但是這個代碼首先一次旋轉所有部分(就像我在沒有動畫的循環中使用pole[k][l].imageView.transform = CGAffineTransformMakeRotation(1.57079633*posTo);一樣),然後執行動畫。

我應該如何避免第一旋轉和僅實現動畫?

回答

2

嘗試將延遲設置爲每個UIImageView的動畫:

[UIView setAnimationDelay:delay]; 

如果每個循環後增加延遲的時間,你應該得到預期的效果。

+0

[UIView setAnimationDelay:delay];不要在動畫之間導致達拉,而只能在所有動畫之前導致達拉 – 2012-02-19 10:29:08

+1

是的,這就是爲什麼你在每次循環後增加延遲(例如delay + = 0.2)。所以每個動畫都有不同的延遲。我沒有時間去嘗試,但我認爲這應該起作用。 – joern 2012-02-19 11:28:19

+0

是=)我使用了不同的延遲。請查看upd – 2012-02-19 12:28:22

0

嘗試的NSTimer https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/Reference/NSTimer.html#//apple_ref/doc/uid/TP40003747

寫方法對細胞的動畫(細胞的COORDS會PARAMS),並把不同的呼叫之間的計時器

+0

我試圖用NSThread但沒有happing可言。 – 2012-02-19 10:30:09

+0

也睡(1);並等待(1);不工作。我等待NxN秒,然後我看到所有圖像的動畫 – 2012-02-19 10:43:18

2

beginAnimations:context:第一個參數是一個animationID。你可以用它來組合(或在你的情況下取消組合)動畫。

嘗試使用不同的animationID爲每個對象的

float delay = 0; 
for (int k=0; k<kol; k++) 
    for (int l=0; l<kol; l++) 
    { 
     [UIView beginAnimations:[NSString stringWithFormat:@"anim_%d_d", k, l] context:NULL]; 
     [UIView setAnimationDelay:delay]; 
     /* animate */ 
     delay += 0.05; 
    } 
} 
+1

我不確定這是否正常工作,所以我只是試了一下,結果證明如果對每個視圖使用不同的延遲,則不需要動畫ID。 – 2012-02-19 11:11:21

+0

yes =)我只使用不同的延遲。請看一下upd – 2012-02-19 12:28:05