我有CALayer
子類,稱爲MyLayer
:[CALayer animationForKey:]的可靠性如何?
@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);
}
我所看到的是這種方法不可靠......我可以在屏幕上看到t帽子動畫是完成(沒有任何動作等),而animationForKey:
不返回nil
。行爲是半隨機的......大部分時間都按預期進行。但有時需要1-2秒才能開始獲得nil
-s。
這種怪異的行爲消失,如果我設置一個委託來製作動畫animation.delegate = self
和實施animationDidStop:finished:
。
有人也經歷過這種情況嗎?
你在主線程上用animationForKey檢查它嗎? –
是的,主Gui線程中的所有內容... – debleek63
我看到了相同的行爲,並且爲您添加了一個委託和'animationDidStop:finished:'方法獲取了預期的行爲。核心動畫錯誤?其他解決方案? –