animationDidStop方法的多个CAAnimations?

时间:2011-10-13 02:18:03

标签: ios animation delegates core-animation

我知道你必须使用这个方法来获取动画结束时的委托方法:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {

问题是,我如何区分多个CAAnimations,如2个或更多?

我用谷歌搜索了这个,但我没有找到任何有用的东西。

请与我分享您是如何完成此任务的!

谢谢!

2 个答案:

答案 0 :(得分:50)

您可以为此设置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");
    }
}

答案 1 :(得分:1)

CAAnimation对象应该不时重复使用,这就是为什么我不想给它一个特定的密钥(因为它不是唯一的)。使其与众不同的是与addAnimation:forKey:的CALayer的关联。出于这个原因,我在animationDidStop中使用了以下代码:

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