2009-07-21 4 views
2

J'ai ce code. À la fin du tableau de valeurs, vous pouvez voir que je fournis 0.5 pour l'opacité. Mais pour une raison quelconque, lorsque l'animation s'arrête, elle clignote à nouveau et laisse la vue complètement transparente. Quel est le problème ici?Pourquoi ce CAKeyFrameAnimation s'arrête-t-il avec une opacité nulle?

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]; 

Répondre

5

La valeur par défaut fillMode (voir here) pour un CAAnimation est kCAFillModeRemoved. Vous devez définir la fillMode de votre animation à kCAFillModeForwards, et également définir la propriété removedOnCompletion-NO (par défaut, il est YES):

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

Vous remarquerez que ces propriétés ont été définies dans la source que j'ai écrit pour votre précédente question - ils étaient là pour une raison.

Questions connexes