Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone [CALayer animationForKey:]有多可靠?_Iphone_Core Animation_Calayer_Cakeyframeanimation - Fatal编程技术网

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

如果我将代理设置为animation
animation.delegate=self
并实现
animationDidStop:finished:
,这种奇怪的行为就会消失


有人也经历过这种情况?

声明@dynamic会使CALayer为您实现访问器方法(请参阅和)。所以,您可能只是看到了对调用哪个版本的“busy”的困惑。你为什么首先声明“@dynamic”


animationForKey也可能出现一些奇怪的情况,但我会先尝试删除“@dynamic”。

您是否在主线程上使用animationForKey进行检查?是的,主gui线程中的所有内容……我看到了相同的行为,对于您,添加一个委托和
animationDidStop:finished:
方法将获得预期的行为。很奇怪。核心动画错误?还有其他解决办法吗?