Несколько CAAnimations для метода animationDidStop?
Я знаю, что вы должны использовать этот метод, чтобы получить метод делегата для завершения анимации:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
Проблема в том, как бы я различил несколько CAAnimations, например, 2 или больше?
Я гуглил это и ничего полезного не нашел.
Пожалуйста, поделитесь со мной о том, как вы достигли этого!
Спасибо!
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
}