CAKeyframeAnimation - PullRequest
       24

CAKeyframeAnimation

5 голосов
/ 26 октября 2010

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

    CALayer *animLayer = [CALayer layer];
    animLayer.bounds = CGRectMake(0, 0, width, height);
    animLayer.position = CGPointMake(0, 0);

    CAKeyframeAnimation *customFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];
    NSArray *sizeValues = [NSArray arrayWithObjects:(id)image1, (id)image2, nil];
    NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:0.5f], nil]; 
    NSArray *timingFunctions = [NSArray arrayWithObjects: [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault], [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault], nil];

    [customFrameAnimation setValues:sizeValues];
    [customFrameAnimation setKeyTimes:times];

    customFrameAnimation.duration=5.0;
    customFrameAnimation.beginTime = 1e-100;
    customFrameAnimation.fillMode = kCAFillModeRemoved;
    customFrameAnimation.timingFunctions = timingFunctions;
    customFrameAnimation.removedOnCompletion = YES;
    [animLayer addAnimation:customFrameAnimation forKey:nil]; 

Заранее спасибо.

1 Ответ

13 голосов
/ 28 октября 2010

Для вашей анимации необходимо, чтобы ее режим расчета был установлен на kCAAnimationDiscrete.

Посмотрите документацию по keyTimes , которая описывает, как используется режим расчета:

Соответствующие значения в keyTimes массив зависит от свойство analysisMode.

  • Если для режима расчета установлено значение kCAAnimationLinear, первое значение в массив должен быть 0.0 и последний значение должно быть 1,0. Значения интерполируется между указанным ключом раз.

  • Если установлен режим расчета kCAAnimationDiscrete , первый значение в массиве должно быть 0.0.

  • Если режим расчета установлен в kCAAnimationPaced или kCAAnimationCubicPaced, keyTimes массив игнорируется.

Если значения в массив keyTimes недействителен или не подходит для режима расчета, массив keyTimes игнорируется.

И тогда вы можете прочитать описание режимов расчета:

Значения режимов расчета

Эти константы используются свойство accountMode.

NSString * const kCAAnimationLinear;

NSString * const kCAAnimationDiscrete;

NSString * const kCAAnimationPaced;

Константа

kCAAnimationLinear

Простая линейная расчет между значениями ключевых кадров.
Доступный в Mac OS X v10.5 и позже. Объявлено в CAAnimation.h.

kCAAnimationDiscrete

Каждое значение ключевого кадра используется по очереди, без интерполяции значения рассчитаны. Доступно в Mac OS X v10.5 и выше. Объявлено в CAAnimation.h.

kCAAnimationPaced

Значения ключевых кадров интерполируются для получения четного темп на протяжении всей анимации.
Доступный в Mac OS X v10.5 и позже. Объявлено в CAAnimation.h.

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

С наилучшими пожеланиями.

...