如何为数组中的 UILabel 设置动画以在它们之间以相等的延迟在屏幕上移动?

How can I animate UILabels from an array to move across the screen with an equal delay between them?

我有一组 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 秒的延迟,但所有标签都会同时动画。为什么是这样?有解决办法吗?

谢谢

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

而是将延迟设置为迭代索引 (i):

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

所以第一个将从 0 开始,第二个从 1 开始,第三个从 2 开始,依此类推

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

像这样使用延迟:

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

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