81 votes

Animer le texte UILabel entre deux nombres?

Je suis nouveau sur iPhone et Mac de programmation (développé pour Windows avant), et j'ai une question:

Comment animer la propriété text d'un UILabel entre deux nombres, par exemple, de 5 à 80 dans un Ease-Out style? Est-il possible avec le Noyau de l'Animation? J'étais à la recherche sur google pour une heure, mais je havn'pas trouvé tout ce que la résolution de mon problème... Ce que je veux: Animer les utilisateurs de l'argent pour un simple jeu. Il n'est pas très agréable quand il passe de 50 à 100 ou quelque chose comme ça sans animation.

Toute personne ayant une idée de comment faire cela?

Merci!

160voto

CedricSoubrie Points 3008

Vous pouvez utiliser les transitions automatiques. Cela fonctionne parfaitement bien:

 // Add transition (must be called after myLabel has been displayed)
 CATransition *animation = [CATransition animation];
animation.duration = 1.0;
animation.type = kCATransitionFade;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[myLabel.layer addAnimation:animation forKey:@"changeTextTransition"];

// Change the text
myLabel.text = newText;
 

Ce code fonctionne si myLabel est déjà affiché. Sinon myLabel.layer sera nil et l'animation ne sera pas ajoutée à l'objet.

27voto

Anton Gaenko Points 331

Ça marche bien!

 [UIView transitionWithView:self.label duration:.5f options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionTransitionCrossDissolve animations:^{
    self.label.text = rand() % 2 ? @"111!" : @"42";
  } completion:nil];
 

7voto

jowie Points 3733

J'ai trouvé un excellent moteur pour l'interpolation de valeurs avec une variété de fonctions de minutage différentes appelées PRTween . Installez les classes et créez du code suivant ces lignes:

 - (IBAction)tweenValue
{
    [[PRTween sharedInstance] removeTweenOperation:activeTweenOperation];
    PRTweenPeriod *period = [PRTweenPeriod periodWithStartValue:0.0 endValue:100.0 duration:1.0];
    activeTweenOperation = [[PRTween sharedInstance] addTweenPeriod:period
                                                             target:self
                                                           selector:@selector(update:)
                                                     timingFunction:&PRTweenTimingFunctionCircOut];
}

- (void)update:(PRTweenPeriod*)period
{
    self.animatingView.center = CGPointMake(period.tweenedValue + 100.0, 200.0);
    self.valueLabel.text = [NSString stringWithFormat:@"%.2f", period.tweenedValue];
}
 

Travaille un régal pour moi. :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X