Как проверить, когда анимация заканчивается, если блок анимации - PullRequest
1 голос
/ 04 января 2011

У меня есть контроллер, который добавляет в качестве подпредставлений пользовательский класс UIView с именем Circle.Давайте назовем конкретный экземпляр Circle, «круг».

У меня есть метод в Circle, animateExpand, который расширяет круг за счет анимации вида.

В следующем коде (который находится в контроллере) я хочу alloc и init круг, добавить его к NSMutableArray circleArray, анимировать расширение и в конце расширения,Я хочу удалить объект из массива.Моя попытка:

Circle *circle = [[Circle alloc] init];
[circleArray addObject:circle];
[circle animateExpand];
[circleArray removeObjectIdenticalTo:circle];  
[circle release];

Проблема в том, что [circleArray removeObjectIdenticalTo:circle]; вызывается до завершения анимации.Предположительно, потому что анимация выполняется в отдельном потоке.Я не могу реализовать удаление в completion:^(BOOL finished){ }, потому что класс Circle не знает о circleArray.

. Любые решения будут полезны, спасибо!

Ответы [ 2 ]

4 голосов
/ 04 января 2011

Попробуйте:

Circle *circle = [[Circle alloc] init];
if (circle) {
    [circleArray addObject: circle];

    [UIView
        animateWithDuration: 1.0 // or whatever
        animations: ^ {
            // the animations in -animateExpand "belong to" this outer animation block
            [circle animateExpand];
        }
        completion: ^ (BOOL finished) {
            [circleArray removeObjectIdenticalTo: circle];
        }];

    [circle release];
}
0 голосов
/ 04 января 2011

Если я не ошибаюсь, нет возможности просто остановить текущую анимацию вида.Однако, если новая анимация будет применена к представлению, она остановит текущую анимацию.В этом случае, перед удалением круга, вы можете начать очень короткий цикл анимации (скажем, 0,1 с), который мало что дает.И затем выполните удаление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...