AnimationForKey слоя UIView: всегда ноль - PullRequest
2 голосов
/ 13 апреля 2011

У меня довольно любопытная проблема.

У меня есть вид, что я оживляю с 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.

1 Ответ

2 голосов
/ 13 апреля 2011

Я могу только догадываться, но, возможно, когда вызывается метод animationDidStop:finished:, ваша анимация уже удалена со слоя.Так что [someView.layer animationForKey:@"positionAnimation"] равно нулю.

Надеюсь, это поможет

...