2014-07-23 102 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

计时器的想法完全工作!谢谢。 –

相关问题