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