Несколько CAAnimations для метода animationDidStop? - PullRequest
20 голосов
/ 13 октября 2011

Я знаю, что вы должны использовать этот метод, чтобы получить метод делегата для завершения анимации:

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

Проблема в том, как бы я различал несколько CAAnimations, например, 2 или более?

Я гуглил это и ничего полезного не нашел.

Пожалуйста, поделитесь со мной о том, как вы достигли этого!

Спасибо!

Ответы [ 2 ]

50 голосов
/ 13 октября 2011

Вы можете установить объекты ключа / значения для экземпляра 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 голос
/ 01 июня 2016

A CAAnimation объект должен время от времени использоваться повторно, и поэтому я не люблю давать ему определенный ключ (поскольку он не уникален).Что делает его уникальным, так это связь с CALayer с addAnimation:forKey:.По этой причине я использую следующий код в animationDidStop:

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