Как установить конечное значение явной анимации CA с задержкой

#ios #xcode #ios7 #core-animation #quartz-graphics

#iOS #xcode #ios7 #ядро-анимация #quartz-графика

Вопрос:

У меня есть явная анимация, в которой я хочу установить конечное значение, чтобы объект оставался в конечной точке. Но как я могу добиться этого при отложенной анимации: Вот код:

 CAKeyframeAnimation *moveAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    moveAnimation.duration = 0.3;
    moveAnimation.cumulative = YES;
    moveAnimation.repeatCount = 1;

    // Bounce
    [moveAnimation setValues:[NSArray arrayWithObjects:
                         [NSValue valueWithCGPoint:[self getCoordinatePointForAnimationWithRadius:0 withIndex:i]],
                         [NSValue valueWithCGPoint:[self getCoordinatePointForAnimationWithRadius:radius   10 withIndex:i]],
                         [NSValue valueWithCGPoint:[self getCoordinatePointForAnimationWithRadius:radius - 5 withIndex:i]],
                         [NSValue valueWithCGPoint:[self getCoordinatePointForAnimationWithRadius:radius withIndex:i]], nil]];

    [moveAnimation setKeyTimes:[NSArray arrayWithObjects:
                           [NSNumber numberWithFloat:0],
                           [NSNumber numberWithFloat:0.5],
                           [NSNumber numberWithFloat:0.75],
                           [NSNumber numberWithFloat:1.0], nil]];

    [moveAnimation setTimingFunctions:[NSArray arrayWithObjects:
                                       [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut], nil]];



    moveAnimation.beginTime = CACurrentMediaTime()   1   (0.1 * i);


    [layer addAnimation:opacityAnimation forKey:@"opacityAnimationUp"];
    [layer addAnimation:moveAnimation forKey:@"moveAnimationUp"];

// That's not working correctly because of the delay
    [layer setOpacity:1.0];
    [layer setPosition:[self getCoordinatePointForAnimationWithRadius:radius withIndex:i]];
  

Спасибо!

С наилучшими пожеланиями из Германии, Крис

Ответ №1:

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

 moveAnimation.fillMode = kCAFillModeBackwards;
  

Комментарии:

1. Вау, это получилось. Спасибо, Дэвид ( 1)