[Ios] Come animare il colore di sfondo di un UILabel?


Answers

veloce

  1. ( importante ) Impostare il colore di sfondo di UILabel per cancellare (in IB o nel codice). Per esempio:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        myLabel.backgroundColor = UIColor.clear
    }
  2. Animare il colore di sfondo del livello.

    @IBAction func animateButtonTapped(sender: UIButton) {
    
        UIView.animate(withDuration: 1.0, animations: {
            self.myLabel.layer.backgroundColor = UIColor.red.cgColor
        })
    }

Si noti che CGColor viene aggiunto dopo UIColor .

Risultato

Question

Sembra che dovrebbe funzionare, ma non lo fa. Il colore diventa verde in una volta.

self.labelCorrection.backgroundColor = [UIColor whiteColor];
[UIView animateWithDuration:2.0 animations:^{
    self.labelCorrection.backgroundColor = [UIColor greenColor];
}];



Se non vuoi approfondire Quartz, per rispondere a una delle risposte prev, crea un UIView vuoto delle stesse dimensioni di UILabel e posizionalo nello stesso punto di UILabel (e in ordine Z, sotto di esso) e puoi animare il colore di sfondo di UIView (l'ho provato e funziona per me).




Ecco il riferimento:

animazioni Un oggetto blocco contenente le modifiche da impegnare alle viste. Qui è dove si modifica a livello di programmazione tutte le proprietà animabili delle viste nella gerarchia della vista. Questo blocco non accetta parametri e non ha alcun valore di ritorno. Questo parametro non deve essere NULL

Quello che capisco di questo è quando la tua vista chiama il blocco di animazione, quindi il tuo colore di sfondo dell'etichetta di visualizzazione è commesso in verde da quel momento. Quindi, se non si cambia il colore dello sfondo dell'etichetta in qualcos'altro, allora sarà sempre verde. Questo è quello che immagino




Swift 3

Per animare il colore dello sfondo dell'etichetta da bianco a verde, imposta l'etichetta in questo modo:

self.labelCorrection.backgroundColor = UIColor.clear
self.labelCorrection.layer.backgroundColor = UIColor.white.cgColor

Animare in questo modo:

UIView.animate(withDuration: 2.0) { 
    self.labelCorrection.layer.backgroundColor = UIColor.green.cgColor
}

Per tornare allo stato originale, in modo da poter nuovamente animare, assicurati di rimuovere le animazioni:

self.labelCorrection.layer.backgroundColor = UIColor.white.cgColor
self.labelCorrection.layer.removeAllAnimations()



Recentemente mi sono imbattuto in questo problema e dopo alcune ricerche ho capito che sostanzialmente nulla è cambiato (e probabilmente non lo sarà nel prossimo futuro), quindi ho finito col usare il framework POP di Facebook (non solo) per quello.

Puoi facilmente realizzare animazioni di proprietà di base su entrambi i livelli di visualizzazione e livello, ma in aggiunta offre una transizione graduale tra i colori (e in pratica qualsiasi cosa tu voglia, anche i tuoi tipi personalizzati, con qualche codifica aggiuntiva). Quindi per il colore di sfondo, dovresti fare qualcosa del genere:

   // Create spring animation (there are more types, if you want)
   let animation = POPSpringAnimation(propertyNamed: kPOPViewBackgroundColor)

   // Configure it properly
   animation.autoreverses = false
   animation.removedOnCompletion = true
   animation.fromValue = UIColor.yourBeginningColor()
   animation.toValue = UIColor.yourFinalColor()

   // Add new animation to your view - animation key can be whatever you like, serves as reference
   label.pop_addAnimation(animation, forKey: "YourAnimationKey")

Viola, ora puoi animare i colori di sfondo su tutto ciò che ha quella proprietà!