2014-07-23 33 views
0

我可以用下面的代碼繪製點,但我需要用動畫逐一繪製每個點。當我嘗試這一點時,只有在for循環結束後,所有點纔出現在屏幕上。
我做了一些研究,但我無法弄清楚爲什麼這些點不是在for循環中逐一繪製。 singerData是一個有x個點的數組。如何在iOS中使用動畫從for循環中獲取數據點

-(void)drawDotGraphForUser 
{  
    UIView *viewAnimationUser = [[UIView alloc]init]; 
    viewAnimationUser.frame = CGRectMake(0, 0, 320, 100); 

    for (int i = 0; i<singerPitchDataSize; i++) 
    { 
     CALayer *layer = [CALayer layer]; 
     NSAssert1(layer != nil, @"failed to create CALayer #%i", i); 

     layer.backgroundColor = [UIColor colorWithRed:0 green:0 blue:1 alpha:1.0].CGColor; 
     layer.frame = CGRectMake(i+1, singerData[i], 1.0, 1.0); 
     NSLog(@"GraphUser= %d=%f",i,singerData[i]); 

     NSLog(@"MSprites=%@",mSprites[i]); 

     CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; 
     pathAnimation.duration = 5; 
     pathAnimation.fromValue = [NSNumber numberWithInt:0]; 
     pathAnimation.toValue = [NSNumber numberWithInt:singerPitchDataSize]; 

     [layer addAnimation:pathAnimation forKey:@"strokeEnd"]; 
     [viewAnimationUser.layer addSublayer:layer]; 
     [self.view addSubview:viewAnimationUser]; 

    } 
} 
+0

你是從主線程運行它嗎? – Mika

+0

@Mikael是的,我做的。我只是簡單地調用這個方法[self drawDotGraphForUser]; –

回答

0

這些都出現在同一時間發生,因爲您的動畫被自動發送到另一個線程非常快。如果你希望它們一個接一個出現,你需要通過在你的函數結尾添加一個定時器來將它們添加到子視圖中,或者你需要監聽動畫結束以觸發下一個。

+0

謝謝,這是有道理的。我會試試這個。 –

+0

計時器的想法完全工作!謝謝。 –

相關問題