Iphone [CALayer animationForKey:]有多可靠?
我有一个子类Iphone [CALayer animationForKey:]有多可靠?,iphone,core-animation,calayer,cakeyframeanimation,Iphone,Core Animation,Calayer,Cakeyframeanimation,我有一个子类CALayer,名为MyLayer: @interface MyLayer : CALayer @property (nonatomic,readonly) BOOL busy; -(void)performTask1; -(void)performTask2; -(void)performTask3; @end 在performTask*函数中,我说: -(void)performTask* { CAKeyframeAnimation *animation = [...]
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
如果我将代理设置为animationanimation.delegate=self
并实现animationDidStop:finished:
,这种奇怪的行为就会消失
有人也经历过这种情况?声明@dynamic会使CALayer为您实现访问器方法(请参阅和)。所以,您可能只是看到了对调用哪个版本的“busy”的困惑。你为什么首先声明“@dynamic”
animationForKey也可能出现一些奇怪的情况,但我会先尝试删除“@dynamic”。您是否在主线程上使用animationForKey进行检查?是的,主gui线程中的所有内容……我看到了相同的行为,对于您,添加一个委托和
animationDidStop:finished:
方法将获得预期的行为。很奇怪。核心动画错误?还有其他解决办法吗?