如何为数组中的 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 秒
我有一组 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 秒