Как запустить CABasicAnimation в потоке

for(NSInteger i = 0; i < 10; i++)
{
    ....
    singleThread = [[NSThread alloc] initWithTarget:self selector:@selector(changeLayerBackground) object:nil];
    [singleThread start];
}

функцию changeLayerBackground вот так:

- (void) changeLayerBackground
{
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
    animation.delegate = self;
    ......
    [layer addAnimation:selectionAnimation forKey:@"animation"];
}

Я обнаружил, что функция animationDidStop:finished: вызывается только после завершения всего цикла.

Кто-нибудь знает об этом?
Я подумал об этом, потому что делегатом анимации является self, контроллер представления. И анимация вызывается потоком, поэтому делегат не работает. Но я не знаю, как это изменить. Я пробовал использовать поток как замену, все равно не работает.

Кто-нибудь может мне с этим помочь?

Моя цель - при вызове анимации цикл должен приостанавливаться, пока анимация не будет завершена, а затем цикл должен быть продолжен. пока петля не закончится.


person Yan Yueshen    schedule 25.12.2011    source источник
comment
Разве вы не должны запускать анимацию в основном потоке?   -  person Abizern    schedule 25.12.2011


Ответы (1)


Вы уверены, что хотите запустить свою анимацию в ветке? Потому что он уже работает в собственном потоке. Как говорится в документе, CoreAnimation предоставляет

Интерфейс абстрактной анимации, позволяющий запускать анимацию в отдельном потоке, независимо от цикла выполнения вашего приложения.

Может быть, вы просто хотите объединить анимации в цепочку? Если это так, посмотрите эту ветку: объединение анимаций в цепочку

person thomas.g    schedule 26.12.2011