Multiple CAAnimations for animationDidStop method?

前端 未结 2 479
忘了有多久
忘了有多久 2020-12-25 13:58

I know you have to use this method to get the delegate method for when the animation has finished:

- (void)animationDidStop:(CAAnimation *)theAnimation finis         


        
相关标签:
2条回答
  • 2020-12-25 14:15

    You can set key/value objects for CAAnimation instance like this:

    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;
    

    Check which one was called in delegate method:

    - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
        if([[anim valueForKey:@"id"] isEqual:@"animation1"]) {
            NSLog(@"animation1");
        }
        if([[anim valueForKey:@"id"] isEqual:@"animation2"]) {
            NSLog(@"animation2");
        }
    }
    
    0 讨论(0)
  • 2020-12-25 14:27

    A CAAnimation object is supposed to be reused from time to time and that's why I don't like to give it a certain key (since it's not unique). What makes it unique is the association with a CALayer with addAnimation:forKey:. For this reason I use the following code in animationDidStop:

    if animation == layer.animationForKey(AnimationKeys.scaleUp) {
       // scaleUp animation has completed
    }
    
    0 讨论(0)
提交回复
热议问题