如何延迟一个method/animation?
How to delay a method/animation?
所以我有一个简单的动画在我看来。它只是将一堆 UILabel 从屏幕的右上角扫到它们的设置坐标。不过,我希望每个标签之间有一点延迟,这样它们就会一个接一个地流出。现在太快了:
-(void)drawLabels
{
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 animations:^{
label.center=CGPointMake(x, y);
}];
NSDate *future = [NSDate dateWithTimeIntervalSinceNow: 0.5 ];
[NSThread sleepUntilDate:future];
}
}
我想在屏幕上绘制每个标签后有一个延迟,你看上面我已经尝试使用 NSDate 和 NSThread 但是它似乎没有任何区别。有任何想法吗?谢谢
尝试使用 NSTimer
class。一个例子:
[NSTimer scheduledTimerWithTimeInterval:0.5
target:self
selector:@selector(drawLabels)
userInfo:nil
repeats:YES];
这将创建一个计时器,该计时器将在此 class 调用 drawLabels 方法中每 0.5 秒触发一次。您可能还想编辑您的方法
这个怎么样
[self performSelector:@selector(moveLabel) withObject:label afterDelay:0.5];
另一种使用animateWithDuration:delay的方法:
CGFloat delay = 0.0f;
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:delay options:0 animations:^{
label.center=CGPointMake(x, y);
} completion:^(BOOL finished){
}];
delay += 0.5f; // add 1/2 second delay to each label (0, 0.5, 1.0, 1.5)
}
所以我有一个简单的动画在我看来。它只是将一堆 UILabel 从屏幕的右上角扫到它们的设置坐标。不过,我希望每个标签之间有一点延迟,这样它们就会一个接一个地流出。现在太快了:
-(void)drawLabels
{
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 animations:^{
label.center=CGPointMake(x, y);
}];
NSDate *future = [NSDate dateWithTimeIntervalSinceNow: 0.5 ];
[NSThread sleepUntilDate:future];
}
}
我想在屏幕上绘制每个标签后有一个延迟,你看上面我已经尝试使用 NSDate 和 NSThread 但是它似乎没有任何区别。有任何想法吗?谢谢
尝试使用 NSTimer
class。一个例子:
[NSTimer scheduledTimerWithTimeInterval:0.5
target:self
selector:@selector(drawLabels)
userInfo:nil
repeats:YES];
这将创建一个计时器,该计时器将在此 class 调用 drawLabels 方法中每 0.5 秒触发一次。您可能还想编辑您的方法
这个怎么样
[self performSelector:@selector(moveLabel) withObject:label afterDelay:0.5];
另一种使用animateWithDuration:delay的方法:
CGFloat delay = 0.0f;
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:delay options:0 animations:^{
label.center=CGPointMake(x, y);
} completion:^(BOOL finished){
}];
delay += 0.5f; // add 1/2 second delay to each label (0, 0.5, 1.0, 1.5)
}