Как отложить метод / анимацию?
Поэтому у меня есть простая анимация на мой взгляд. Он просто перемещает кучу UILabels из верхней правой части экрана в их заданные координаты. Я хотел бы небольшую задержку между каждым лейблом, хотя, чтобы они вытекли один за другим. Сейчас это слишком быстро:
-(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, однако, похоже, это не имеет никакого значения. Есть идеи? Спасибо
3 ответа
Решение
Другой подход с использованием 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)
}
Как насчет этого
[self performSelector:@selector(moveLabel) withObject:label afterDelay:0.5];
Попробуйте использовать NSTimer
учебный класс. Пример:
[NSTimer scheduledTimerWithTimeInterval:0.5
target:self
selector:@selector(drawLabels)
userInfo:nil
repeats:YES];
Это создаст таймер, который будет срабатывать каждые 0,5 секунды в этом классе, вызывая метод drawLabels. Вы также можете изменить свой метод