Какое значение имеет значение keyTime в CAKeyFrameAnimation? - PullRequest
8 голосов
/ 02 февраля 2010

Например, у меня есть CAKeyFrameAnimation:

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

    animation.duration = 1.6;
    //animation.cumulative = YES;
    animation.repeatCount = 1;
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeForwards;

    animation.values = [NSArray arrayWithObjects:
                        [NSNumber numberWithFloat:0.0 * M_PI],
                        [NSNumber numberWithFloat:(15.0/180.0) * M_PI],
                        [NSNumber numberWithFloat:(30.0/180.0) * M_PI], // animation stops here...
                        [NSNumber numberWithFloat:(45.0/180.0) * M_PI], // ignored!
                        [NSNumber numberWithFloat:(190.0/180.0) * M_PI], nil]; // ignored!

    animation.keyTimes = [NSArray arrayWithObjects:
                          [NSNumber numberWithFloat:0.0],
                          [NSNumber numberWithFloat:0.2],
                          [NSNumber numberWithFloat:0.4], // ignored!
                          [NSNumber numberWithFloat:0.8], // ignored!
                          [NSNumber numberWithFloat:1.6], 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"];

То, что я не получаю:

A) являются значениями ключевого времени абсолютного прошедшего времени с момента запуска анимации?

B) ключевые значения времени просто говорят, сколько времени нужно использовать для этого конкретного ключевого кадра?

Ответы [ 2 ]

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

документы здесь немного странно сформулированы, но точны:

Каждое значение в массиве является числом с плавающей запятой в диапазоне от 0,0 до 1,0 и соответствует одному элементув массиве значений.Каждый элемент в массиве keyTimes определяет продолжительность соответствующего значения ключевого кадра как часть общей продолжительности анимации.Каждое значение элемента должно быть больше или равно предыдущему значению.

По сути, каждое значение указывает, в какой нормализованной точке анимации происходит данный ключевой кадр.Поэтому, если ключевой кадр составляет 25% в анимации, значение будет равно 0,25.Запутанная часть документов заключается в том, что они указывают на то, что это продолжительность, а на самом деле это нормализованный момент времени.

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

Значение keyTimes - это процент от общей продолжительности. Допустимые значения находятся в диапазоне от 0 до 1 (от 0% до 100%). Ваше последнее значение 1.6 неверно.

Например, если ключевой кадр должен происходить через 0,8 секунды в анимации, то значение keyTime будет равно 0,5, если ваша продолжительность равна 1,6 секундам.

...