如何从数组中为UILabels设置动画,以便在屏幕之间移动并在它们之间延迟相等的时间?

时间:2015-01-04 15:54:17

标签: ios uilabel uiviewanimation animatewithduration

我有一组UILabel,我想在屏幕上制作动画。我正在使用如下所示的for循环迭代数组:

for(int i=0; i<[self.onScreenLabels count]; i++)
{
    UILabel *label = self.onScreenLabels[i];

    int x = label.frame.origin.x;
    int y = label.frame.origin.y;

    label.center=CGPointMake(320, 0);
    [self.view addSubview:label];

    [UIView animateWithDuration:0.3 delay:1.0 options:0 animations:^{

    label.center=CGPointMake(x, y);

} completion:^(BOOL finished){

}];

}

我希望每个UILabel在动画制作之前的最后一秒延迟1.0秒,例如等待1秒钟,先开火,等待1秒钟开火,然后等待1秒钟开火第三个......等等一直到阵列结束。但是,使用此代码会有1秒的延迟,但所有标签会同时生成动画。为什么是这样?有办法吗?

感谢

2 个答案:

答案 0 :(得分:1)

延迟是相对于您创建动画的时间,因此,因为所有动画都是在循环中同时创建的,所以它们都具有相同的延迟。

相反,将延迟设置为迭代索引(i):

[UIView animateWithDuration:0.3 delay:i options:0 animations:^{ ...

所以第一个将从0开始,第二个从1开始,第三个从2开始,等等

(或(i + 1)如果您愿意)

答案 1 :(得分:0)

像这样使用延迟:

[UIView animateWithDuration:0.3 delay:i + 1.0 options:0 animations:^{

这会将第一个标签延迟1秒钟,之后每个标签会延迟+1秒