Как отложить метод / анимацию?

Поэтому у меня есть простая анимация на мой взгляд. Он просто перемещает кучу 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. Вы также можете изменить свой метод

Другие вопросы по тегам