У меня есть подкласс CALayer
, называемый MyLayer
:
@interface MyLayer : CALayer
@property (nonatomic,readonly) BOOL busy;
-(void)performTask1;
-(void)performTask2;
-(void)performTask3;
@end
В performTask*
функциях, я говорю:
-(void)performTask*
{
CAKeyframeAnimation *animation = [...];
...
animation.removedOnCompletion = YES; // "YES" is default anyway
...
[self addAnimation:animation
forKey:TASK*_KEY];
}
Свойство busy
предназначено длявызывающий и реализованный так:
@dynamic busy;
-(BOOL)busy
{
// i.e. for some specific ids
return ([self animationForKey:TASK1_KEY] != nil ||
[self animationForKey:TASK3_KEY] != nil);
}
Я вижу, что этот подход ненадежен ... Я вижу на экране, что анимация завершена (ничего не движется и т. д.)..), в то время как animationForKey:
НЕ возвращает nil
.Поведение является полу-случайным ... В большинстве случаев это происходит так, как ожидалось.Но иногда это занимает 1-2 секунды, прежде чем я начинаю получать nil
-s.
Это странное поведение исчезает , если я устанавливаю делегата для анимации animation.delegate = self
и реализую animationDidStop:finished:
.
Кто-то тоже испытал это?