Ios animationDidStop方法的多个动画?

Ios animationDidStop方法的多个动画?,ios,animation,delegates,core-animation,Ios,Animation,Delegates,Core Animation,我知道必须使用此方法才能在动画完成时获取代理方法: - (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag { 问题是,我如何区分多个caanimation,比如2个或更多 我在谷歌上搜索了一下,没有发现任何有用的东西 请与我分享你是如何做到这一点的 谢谢 您可以像这样为CAAnimation实例设置键/值对象: CABasicAnimation *theAnimation = [CABasicAnima

我知道必须使用此方法才能在动画完成时获取代理方法:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
问题是,我如何区分多个caanimation,比如2个或更多

我在谷歌上搜索了一下,没有发现任何有用的东西

请与我分享你是如何做到这一点的


谢谢

您可以像这样为CAAnimation实例设置键/值对象:

CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
[theAnimation setValue:@"animation1" forKey:@"id"]; 
theAnimation.delegate = self;

CABasicAnimation *theAnimation2 = [CABasicAnimation animationWithKeyPath:@"opacity"];
[theAnimation2 setValue:@"animation2" forKey:@"id"];    
theAnimation2.delegate = self;
检查在委托方法中调用了哪一个:

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
    if([[anim valueForKey:@"id"] isEqual:@"animation1"]) {
        NSLog(@"animation1");
    }
    if([[anim valueForKey:@"id"] isEqual:@"animation2"]) {
        NSLog(@"animation2");
    }
}

一个
CAAnimation
对象应该经常被重用,这就是为什么我不喜欢给它一个特定的键(因为它不是唯一的)。它的独特之处在于与CALayer的关联
addAnimation:forKey:
。因此,我在
animationDidStop
中使用以下代码:

if animation == layer.animationForKey(AnimationKeys.scaleUp) {
   // scaleUp animation has completed
}

我感到惊讶和懊恼的是,如果(anim==theAnimation){…},你不能只做一个
——这对于错误捕捉和自动完成等来说是非常好的。有人知道你为什么不能这样做吗?当我记录时,
anim
值似乎已设置并保存在内存中。
animation
声明为本地,您无法在animationDidStop中访问它。若你们宣布它是全局的,那个么这个问题将是一个非常糟糕的问题,因为你们可以访问那个ivaranywhere@toblerpwn将动画添加到层时,该动画将复制到该层,而不是直接引用。这就是为什么不能在动画上使用==运算符的原因。请注意,
CAAnimation
delegate
很强,因此可能需要将其设置为
nil
以避免保留循环![theAnimation2设置值:@“animation2”forKey:@“id”]不起作用!!!!卡巴西尼化对象的变化如@akaralar所说。为什么这是正确答案?只有在设置“animation.isRemovedOnCompletion=false”时,这才起作用,否则动画一完成就从层中删除,并且永远不会输入if语句。