私はMyLayer
と呼ばれるCALayer
のサブクラスがあります:busy
プロパティは、発信者のためのものであり、このように実装[CALayer animationForKey:]の信頼性はどれですか?
-(void)performTask*
{
CAKeyframeAnimation *animation = [...];
...
animation.removedOnCompletion = YES; // "YES" is default anyway
...
[self addAnimation:animation
forKey:TASK*_KEY];
}
:
@dynamic busy;
-(BOOL)busy
{
// i.e. for some specific ids
return ([self animationForKey:TASK1_KEY] != nil ||
[self animationForKey:TASK3_KEY] != nil);
}
私が言う
@interface MyLayer : CALayer
@property (nonatomic,readonly) BOOL busy;
-(void)performTask1;
-(void)performTask2;
-(void)performTask3;
@end
performTask*
で機能を私が見ているのは、このアプローチが信頼できないということです...私は画面上で見ることができます帽子のアニメーションはです(何も動かないなど)。animationForKey:
はnil
を返しません。振る舞いはセミランダムです...ほとんどの場合、期待通りに動きます。しかし、時々、私がnil
-sを得るのが始まるまでに1〜2秒かかります。私はanimation.delegate = self
をアニメーションとanimationDidStop:finished:
を実装するために、デリゲートを設定した場合
この奇妙な行動は、消えます。
誰かもこれを経験しましたか?
メインスレッドのanimationForKeyで確認していますか? –
はい、メインGUIスレッドのすべて... – debleek63
私は同じ振る舞いを見ています。あなたと同じように、デリゲートと 'animationDidStop:finished:'メソッドを追加すると、期待通りの動作が得られます。コアアニメーションのバグ?その他のソリューション? –