[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];
}];



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 dell'animazione, quindi il tuo colore di sfondo dell'etichetta vista è 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




Recentemente mi sono imbattuto in questo problema e dopo alcune ricerche ho capito che sostanzialmente non è cambiato nulla (e probabilmente non lo sarà in futuro), quindi ho finito con l'utilizzo del framework POP di Facebook (non solo) per quello.

Puoi facilmente realizzare animazioni di proprietà di base su entrambe le viste e livelli, ma in aggiunta, fornisce una transizione graduale tra i colori (e praticamente qualunque 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à!




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()



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).




Links