2
votes

UIView.animate non animé

J'essaye d'animer les modifications textColor d'UILabel en utilisant UIView.animate. Cependant, rien ne change lorsque j'essaye d'utiliser UIView. Voici mon code:

titleLabel.textColor = UIColor(red: 104/250, green: 155/250, blue: 121/250, alpha: 1)
UIView.animate(withDuration: 1.0, animations: {
    self.titleLabel.textColor = UIColor(red:206/255, green: 206/255, blue: 206/255, alpha: 1.0)

Je m'attends à ce que la couleur de l'étiquette passe à une couleur verdâtre, puis revienne à la couleur grise qu'elle était auparavant. Merci d'avance pour votre aide!


3 commentaires

Pouvez-vous publier un enregistrement d'écran de ce qui est affiché en ce moment? L'animation ne fonctionne pas?


@AmirKhan Oui, l'animation ne fonctionne tout simplement pas. Il n'y a rien de spécial.


Vous avez votre point. Vous voulez une simple transformation de couleur. Vérifiez ma réponse ci-dessous.


3 Réponses :


0
votes

Essayer

 UIView.animate(withDuration: 1.0, animations: {
        self.titleLabel.textColor = UIColor(red:206/255, green: 206/255, blue: 206/255, alpha: 1.0)
        self.view.layoutIfNeeded()
    }


0 commentaires

0
votes

TextColor n'est pas censé être animable dans la documentation donc vous devez exécuter le code d'animation ci-dessous.

Raison :

La raison pour laquelle textColor n'est pas animable est UILabel utilise un CALayer normal au lieu d'un CATextLayer. vous avez donc deux options

  1. réaliser une animation sur CATextLayer
  2. Ajoutez une couche d'animation personnalisée comme indiqué ci-dessous dans le code.
let changeColor = CATransition() 

changeColor.duration = 1

CATransaction.begin()

CATransaction.setCompletionBlock {
self.titleLabel.layer.add(changeColor, forKey: nil)
self.titleLabel.textColor = UIColor(red:206/255, green: 206/255, blue: 206/255, alpha: 1.0) }

titleLabel.textColor = UIColor(red: 104.0/255.0, green: 155.0/255.0, blue: 121.0/255.0, alpha: 1.0)

CATransaction.commit()


0 commentaires

6
votes

La propriété textColor n'est pas spécifiée comme étant animable dans la documentation des développeurs Apple, donc je ne pense pas que vous puissiez le faire avec un simple bloc UIView animations .

Vous pouvez utiliser UIView transition à la place.

Code:

UIView.transition(with: self.titleLabel, duration: 1.0, options: .transitionCrossDissolve, animations: {
            self.titleLabel.textColor = UIColor(red: 104/250, green: 155/250, blue: 121/250, alpha: 1)
        }, completion: { _ in
            self.titleLabel.textColor = UIColor(red:206/255, green: 206/255, blue: 206/255, alpha: 1.0)
        })

J'espère cela vous aidera. Faites-moi savoir si vous rencontrez toujours un problème.


0 commentaires