2010-08-09 5 views
1

J'essaie de créer une petite animation lumineuse avec Core Animation. L'animation fonctionne bien jusqu'à présent. Le problème est, l'animation est utilisée dans une cellule de tableau. Lorsque l'animation est ajoutée à une couche qui est actuellement dans une cellule qui n'est pas encore visible (sans défilement), l'animation n'est pas lancée en quelque sorte? Il semble que CoreAnimation n'anime pas les calques qui ne sont pas visibles actuellement?CABasicAnimation n'a pas démarré lors de l'ajout d'une animation à un calque non visible

Mon code est:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
[animation setFromValue:[NSNumber numberWithFloat:0.0]]; 
[animation setToValue:[NSNumber numberWithFloat:1.0]]; 
[animation setDuration:self.currentBlinkFrequency]; 
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]]; 
[animation setAutoreverses:YES]; 
[animation setRepeatCount:HUGE_VALF]; 
[[self.signalImage layer] addAnimation:animation forKey:@"opacity"];  
+0

Si vous ajoutez vos animations à la cellule? Quel comportement obtenez-vous et qu'attendez-vous? Si vous utilisez correctement les cellules de vue de table (c'est-à-dire réutiliser correctement les cellules), alors si la cellule n'est pas visible, elle n'existe probablement pas ... – Vladimir

+0

Je veux juste ajouter une animation lumineuse à un UIImageView dans un TableCell. – Chris

Répondre

1

Ok trouvé une solution de contournement. J'ai utilisé les méthodes d'animation UIView à la place. Parce que ma vitesse d'animation peut être modifiée/désactivée pendant l'animation, j'ai dû utiliser le code suivant pour éviter de donner un coup de pied à plusieurs animations sur la même vue.

Ce code triggeres l'animation:

if (self.currentBlinkFrequency == 0) { 
    self.shouldContinueBlinking = FALSE; 
    self.animationIsRunning = FALSE; 
} else { 
    self.shouldContinueBlinking = TRUE; 
    if (self.animationIsRunning == FALSE) { 
     self.animationIsRunning = TRUE; 
     [self blinkAnimation:@"blink" finished:YES target:self.signalImage];    
    } 
} 

Le code anomation invoqué pour la -method "de blinkAnimation" est emprunté à un autre poste dans stackoverflow here

- (void)blinkAnimation:(NSString *)animationId finished:(BOOL)finished target:(UIView *)target 
{ 
    if (self.shouldContinueBlinking) { 
     [UIView beginAnimations:animationId context:target]; 
     [UIView setAnimationDuration:self.currentBlinkFrequency]; 
     [UIView setAnimationDelegate:self]; 
     [UIView setAnimationDidStopSelector:@selector(blinkAnimation:finished:target:)]; 
     if ([target alpha] == 1.0f) 
      [target setAlpha:0.0f]; 
     else 
      [target setAlpha:1.0f]; 
     [UIView commitAnimations]; 
    } 
} 
Questions connexes