Какое значение имеет keyTime в CAKeyFrameAnimation?

Например, у меня есть 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"];

Чего я не понимаю:

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

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


person openfrog    schedule 02.02.2010    source источник


Ответы (2)


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

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

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

person Rob Napier    schedule 02.02.2010

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

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

person Giao    schedule 02.02.2010