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
。動作は半ランダムです...ほとんどの場合、期待どおりに動作します。nil
ただし、 -sが表示されるまでに 1 ~ 2 秒かかることがあります。
デリゲートをアニメーションに設定して実装すると、この奇妙な動作は消えます。animation.delegate = self
animationDidStop:finished:
これも経験した人いますか?