Повторяющийся блок UIAnimation и способ остановить его снова - PullRequest
3 голосов
/ 07 июля 2011

Я хотел сделать небольшую анимацию загрузчика, чтобы вставить в мое приложение. Раньше я без проблем делал повторяющиеся анимации с CGAnimations, на этот раз я собирался использовать блочный подход.

Я делаю небольшой тест, но могу повторить следующий код:

- (void) startLoading {

    __block int count = 0;

    [UIView animateWithDuration:0.4
                          delay: 0.0
                        options: UIViewAnimationOptionRepeat
                     animations:^{
                         count++;
                     }
                     completion:^(BOOL finished){

                         if (count > 5)
                             count = 0;
                         NSLog(@"%d", count);

                     }];

}

- (void) stopLoading {

}

Вышеуказанный блок запускается только один раз, он не повторяется.

Как заставить блок повторяться, чтобы счетчик увеличивался?

Если я получу эту работу и вставлю свою анимацию в повторяющийся блок, Что входит в stopLoading: снова остановить анимацию?

Спасибо за любую помощь:)

1 Ответ

5 голосов
/ 06 декабря 2011

Вот конечная повторяющаяся анимация:

- (void) animate: (int) count {
    CGPoint origC = v.center;
    void (^anim) (void) = ^{
        v.center = CGPointMake(100,100);
    };    
    void (^after) (BOOL) = ^(BOOL finished) {
        v.center = origC;
        if (count)
            [self animate:count-1];
    };
    int opts = UIViewAnimationOptionAutoreverse;
    [UIView animateWithDuration:1 delay:0 options:opts 
                     animations:anim completion:after];
}

Здесь есть рекурсия, поэтому мы не хотим идти за борт или у нас закончится память, но если мы ограничим наш счетчик (в вашем примере это было 5), у нас все будет хорошо.

...