iPad: Animer UILabels changement de couleur
J'ai un label qui ouvre et affiche des points dans mon application. J'utilise le code suivant pour créer l'étiquette d'obtenir, à plus grande échelle, plus petite. Je tiens également à animer le changement de couleur du violet au vert. Quelqu'un peut-il m'indiquer une ressource dans la réalisation de cet?
mLabel.textColor = [UIColor purpleColor];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelegate:self];
mLabel.transform = CGAffineTransformMakeScale(1.5,1.5);
[UIView setAnimationRepeatCount:1];
mLabel.transform = CGAffineTransformMakeScale(0.5,0.5);
mLabel.textColor = [UIColor greenColor];
[UIView commitAnimations];
Vous devez vous connecter pour publier un commentaire.
Malheureusement, la couleur n'a pas d'animer avec UIView animations.
Les réponses à cette question donner quelques bonnes solutions sans utiliser de Base de l'Animation.
Si vous n'avez pas l'esprit à l'aide d'un CATextLayer au lieu d'un UILabel, puis la couleur (et la mise à l'échelle dans votre exemple) peuvent être animés comme ceci:
Vous pouvez utiliser iOS 4.0 vue de la transition de la méthode pour ce faire:
CATextLayer
est le plus de la réponse correcte, car il va interpoler les valeurs de couleur entre la forme et des couleurs. Cependant, ce qui est pratique lorsqu'une base de fondu de transition d'une couleur à l'autre est suffisant.CATransition
(qui est ce que cela ne), vous devez être prudent afin de ne pas les animer la géométrie de la vue. Au lieu de cela, placer le point de vue de fondu à l'intérieur d'un conteneur de vue (ou couche) et d'animer ce point de vue de la géométrie de la place.CATextLayer
ne plus sophistiquée de l'interpolation de la couleur. Je ne suis pas positif, mais j'imagine qu'il pourrait facilement interpoler entre HSV représentations au lieu de RVB représentations, qui produit de qualité inférieure perceptive interpolation lorsque comparé à HSV.CATransition
est juste un fondu-enchaîné les deux rendus des bitmaps, ce qui pourrait être simple RVB interpolation dans le cas de valeurs de couleur.La raison que textColor n'est pas animables est que UILabel utilise régulièrement CALayer au lieu d'un CATextLayer.
De faire textColor animable (ainsi que le texte, la police, etc.) nous pouvons sous-classe UILabel et utiliser un CATextLayer.
C'est beaucoup de travail, mais heureusement, je l'ai déjà fait 🙂
Vous pouvez trouver une explication complète + drop-in open source de remplacement pour UILabel dans ce l'article
Si vous avez besoin d'utiliser de l'IB couleurs qui sont spécifiés pour en surbrillance ou de certains états et que vous souhaitez animer le changement de couleur avec effet de fondu de sortie, vous pouvez utiliser le code suivant:
Swift:
}
Cette ligne de code qui fonctionne pour moi. Assurez-vous de définir les Options de fondu enchaîné
Swift:
Ajouter avant votre appel à
commitAnimations
:Essayez Ceci: