Почему значения моей анимации игнорируются? - PullRequest
0 голосов
/ 02 февраля 2010

Я пытаюсь сделать CAKeyFrameAnimation для вращения слоя:

CALayer* theLayer = myView.layer;
    CAKeyframeAnimation* animation;
    animation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];

    animation.duration = 1.0;
    animation.cumulative = NO;
    animation.repeatCount = 1;
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeForwards;

    animation.values = [NSArray arrayWithObjects:
                        [NSNumber numberWithFloat:0.0 * M_PI],
                        [NSNumber numberWithFloat:0.5 * M_PI],
                        [NSNumber numberWithFloat:0.3 * M_PI], // animation stops here...
                        [NSNumber numberWithFloat:0.8 * M_PI], // ignored!
                        [NSNumber numberWithFloat:0.7 * M_PI], nil]; // ignored!

    animation.keyTimes = [NSArray arrayWithObjects:
                          [NSNumber numberWithFloat:0.0],
                          [NSNumber numberWithFloat:0.2],
                          [NSNumber numberWithFloat:2.0], // ignored!
                          [NSNumber numberWithFloat:1.5], // ignored!
                          [NSNumber numberWithFloat:2], nil]; // ignored!

    animation.timingFunctions = [NSArray arrayWithObjects:
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear],
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear],
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear],
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], nil];

    [theLayer addAnimation:animation forKey:@"transform.rotation.z"];

Как вы можете видеть в комментариях, анимация запускает только два ключевых кадра, но не все из них. Независимо от того, какие значения я ввожу, анимация никогда не будет запускать более двух ключевых кадров.

Что там может быть не так?

Ответы [ 2 ]

4 голосов
/ 02 февраля 2010

Может быть, вы установили animation.duration в 1, и все же значения keyTimes равны 0, 0,2, а затем 2 ..., что означает, что анимация остановится, прежде чем она достигнет вашего третьего значения.

1 голос
/ 10 августа 2010

Массив keyTimes должен содержать только увеличивающиеся значения от 0,0 до 1,0. Это проценты прохождения анимации, а не необработанные числа в секундах. Таким образом, соответствие ключевого кадра keyTime 0.5 будет происходить в середине анимации, а не через полсекунды анимации (если, конечно, у вас нет анимации в одну секунду).

...