2011-11-09 21 views
0

我有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:

有人也經歷過這種情況嗎?

+0

你在主線程上用animationForKey檢查它嗎? –

+0

是的,主Gui線程中的所有內容... – debleek63

+0

我看到了相同的行爲,並且爲您添加了一個委託和'animationDidStop:finished:'方法獲取了預期的行爲。核心動畫錯誤?其他解決方案? –

回答