Почему эта CAKeyFrameAnimation останавливается с нулевой непрозрачностью? - PullRequest
2 голосов
/ 21 июля 2009

У меня есть этот код. В конце массива значений вы можете видеть, что я предоставляю 0,5 для непрозрачности. Но по какой-то причине, когда анимация останавливается, она снова мигает, а затем оставляет вид полностью прозрачным. Что там не так?

CALayer *layer = self.layer;
CAKeyframeAnimation *blinkAnim = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
blinkAnim.duration = 1.0;
//blinkAnim.repeatCount = 0;
blinkAnim.autoreverses = NO;

// keyframe times and values
// we want to start fully opaque, fade out, stay faded out and fade back in shortly before the end of the cycle
blinkAnim.keyTimes = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0],
                      [NSNumber numberWithFloat:0.4],
                      [NSNumber numberWithFloat:0.6],
                      [NSNumber numberWithFloat:0.85],
                      [NSNumber numberWithFloat:1.0], nil];
blinkAnim.values = [NSArray arrayWithObjects:   [NSNumber numberWithFloat:1.0],
                    [NSNumber numberWithFloat:1.0],
                    [NSNumber numberWithFloat:0.0],
                    [NSNumber numberWithFloat:0.0],
                    [NSNumber numberWithFloat:0.5], nil];
[layer addAnimation:blinkAnim forKey:nil];

1 Ответ

5 голосов
/ 22 июля 2009

Значение по умолчанию fillMode (см. здесь ) для CAAnimation равно kCAFillModeRemoved. Вам следует установить fillMode вашей анимации на kCAFillModeForwards, а также установить свойство removedOnCompletion на NO (по умолчанию это YES):

blinkAnim.removedOnCompletion = NO;
blinkAnim.fillMode = kCAFillModeForwards;

Вы заметите, что эти свойства были установлены в источнике, который я написал для вашего предыдущего вопроса - они были там по причине.

...