2010-11-07 6 views
0

J'ai écrit une animation pour certaines images, et cela fonctionne. C'est à peu près la même animation encore mais cette fois sur un UILable. Mais rien ne semble avoir. L'étiquette dessine mais quand j'appelle la méthode d'animation le texte ne change pas/déplace.Animations ne se passe pas sur mon UILabel

-(void) bounceText 
{ 

NSLog(@"Bounce Text"); 
CABasicAnimation *grow; 
grow = [CABasicAnimation animationWithKeyPath:@"growText"]; 
grow.timingFunction = [CAMediaTimingFunction 
    functionWithName:kCAMediaTimingFunctionLinear]; 
grow.toValue = [NSNumber numberWithFloat:3.0]; 
grow.fromValue = [NSNumber numberWithFloat:0.1]; 
grow.repeatCount = 10; 
grow.fillMode = kCAFillModeForwards; 
grow.removedOnCompletion = YES; 
grow.duration = 5.0; 
grow.autoreverses = NO; 
grow.delegate = self; 


CABasicAnimation *fade; 
fade = [CABasicAnimation animationWithKeyPath:@"fade"]; 
fade.fromValue = [NSNumber numberWithFloat:0.5]; 
fade.toValue = [NSNumber numberWithFloat:1.0]; 
fade.duration = 5.0; 
CALayer *layer = [CALayer layer]; 
hintsLabel.layer.transform=CATransform3DTranslate(CATransform3DIdentity, 0, 0,50); 

[CATransaction begin]; 
[hintsLabel.layer addSublayer:layer]; 
[hintsLabel.layer addAnimation:grow forKey:@"growTheText"]; 
[layer addAnimation:fade forKey:@"fadeText"]; 
[CATransaction commit]; 
} 

Appel de la méthode et l'ajout de texte à l'étiquette

-(void) drawHints 
{ 
if (gameState == SHOWCARD) 
{ 
    hintsLabel.layer.zPosition = 5; 
    hintsLabel.text = @"It's your turn, select a button!"; 
    if (!bounce) 
    { 
    [self bounceText]; 
     bounce = YES; 
    } 
} 
} 

Est-ce que les étiquettes ne peuvent pas être transformés?

joue avec cela pendant une heure et rien ne se passe -.-

Merci -Code

+0

est votre méthode appelée, et est-il appelé sur le thread principal? – Eiko

+0

oui il est appelé peut voir que de la NSLog –

Répondre

4

Le principal problème ici est que vous n'êtes pas spécifier les propriétés à animer. La documentation de CAPropertyAnimation indique ce qui suit pour la méthode animationWithKeyPath:

Le chemin clé de la propriété à animer.

Je ne suis pas 100% sûr de ce que vous essayez d'atteindre avec votre animation, mais où vous avez le code suivant:

fade = [CABasicAnimation animationWithKeyPath:@"fade"]; 

qui devrait être:

fade = [CABasicAnimation animationWithKeyPath:@"opacity"]; 

parce que vous voulez affecter l'opacité du label pour le faire apparaître ou disparaître. Donc, pour faire votre étiquette en fondu d'une opacité de 0,5 à 1,0 plus de 5 secondes, vous devez utiliser le code suivant:

CABasicAnimation *fade; 
fade = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
fade.fromValue = [NSNumber numberWithFloat:0.5]; 
fade.toValue = [NSNumber numberWithFloat:1.0]; 
fade.duration = 5.0; 

[hintsLabel.layer addAnimation:fade forKey:@"fade"]; 
+0

fondu est seulement un nom. Autant que je sache, vous pouvez appeler ce gâteau et cela ne fera aucune différence. –

+0

Le paramètre keyPath que vous spécifiez dans la méthode animationWithKeyPath: est critique pour l'animation. C'est keyPath qui définit la propriété layer à animer. La clé que vous spécifiez dans la méthode addAnimation: forKey: est juste un nom et oui vous pouvez l'appeler 'cake' si vous le souhaitez. –

+0

Merci Chris, :) –

Questions connexes