У меня довольно любопытная проблема.
У меня есть вид, что я оживляю с CAKeyframeAnimation
. Однако анимация работает, как и ожидалось, после запуска метода делегата animationDidStop:finished
слой, связанный с представлением, всегда возвращает nil
при проверке с помощью метода слоя animationForKey:
.
Вот иллюстрация проблемы:
// This is in the view controller
- (void) doAnimation:(id)sender {
CAKeyframeAnimation *positionAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
[positionAnimation setValues:arrayOfPoint];
[positionAnimation setDuration:0.5];
// ViewController is the delegate and has the animationDidStop:finished: method
positionAnimation.delegate = self;
[positionAnimation setValue:@"I am Text" forKeyPath:@"positionAnimation"];
[someView.layer addAnimation:positionAnimation forKey:@"positionAnimation"];
someView.layer.position = newPosition;
}
В другом месте в контроллере у меня есть метод animationDidStop:finished:
, определенный следующим образом:
- (void) animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
NSArray *array = [someView.layer animationKeys];
NSString *stringValue = [anim valueForKey:@"positionAnimation"];
NSLog(@"valueForKey: %@", stringValue);
// Prints 'I am Text'
if(anim == [someView.layer animationForKey:@"positionAnimation"]) {
//THIS NEVER GET CALLED
}
}
Почему блок if никогда не оценивается как True? Почему [someView.layer animationForKey:@"positionAnimation"]
всегда nil
? Кроме того, stringValue
имеет правильные данные, но массив также nil
.