C'è un modo per animare la proprietà textColor di un UIButton? Ho trovato alcune soluzioni per l'animazione del colore del testo UILabel, ma non ne ho visto nessuno per UIButton.Animazione del colore del testo UIButton
risposta
NSTimer è assolutamente non va bene come strumento di animazione, né deve essere utilizzato per la misurazione del tempo in generale in cui è necessaria la precisione (frame rate) Questo blog post esemplifica perfettamente il mio posizione su cosa fare sulle proprietà UILabel non animabili, che dovrebbero essere inviate al server di rendering attraverso CA, non un NSTimer. Invece di UILabel, puoi utilizzare o avvolgere CATextLayer e animare la sua proprietà foregroundColor
nel blocco di animazione standard.
Ovviamente si avrebbe bisogno di utilizzare
[UIButton setTitleColor:[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0] forState:UIControlStateNormal];
Per quanto riguarda in realtà ottenerlo per animare e cambiare colore nel tempo, avresti bisogno di creare un'istanza di NSTimer e utilizzare il paramater @selector per puntare a un metodo specifico da eseguire. Ogni volta che il timer viene eseguito, attiva il metodo che cambia il colore di UIButton.
[NSTimer scheduledTimerWithTimeInterval:2.0f
target:self
selector:@selector(updateCounter:)
userInfo:nil
repeats:YES];
Verificate anche: http://servin.com/iphone/iPhone-Timers-and-Animated-Views.html
concordato. +1 per il collegamento – bkbeachlabs
Si noti che questo non sostituisce una buona animazione CA. Gli oggetti UIColor potrebbero non essere animabili, ma gli oggetti CGColor lo sono assolutamente. Se si potesse sottoclasse UILabel, allora si potrebbe implementare il proprio rendering del testo e utilizzare le animazioni CA inerenti. – CodaFi
Questo non è realmente un'animazione, ma che avrebbe funzionato.
Creare un timer con qualsiasi frequenza con cui si desidera animare i colori.
Avere quel timer chiama un metodo, changeColorOnButton
ogni volta che si spara.
[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(changeColorOnButton:) userInfo:nil repeats:YES];
Creare una matrice di colori, colorsArray
(o organizzare i colori prima del tempo, o aggiungere un gruppo ad un array e shuffle loro di ripartire le probabilità. Creare un int, intForColorInArray
.
Nel metodo changeColorOnButton , fare qualcosa di simile:.
- (void) changeColorOnButton:(UIButton *) button {
UIColor *nextColor = [colorsArray objectAtIndex:intForColorArray];
[button.titleLabel.setTextColor:nextColor];
intForColorArray = (intForColorArray +1) % [colorsArray count];
}
ha preso il metodo timer da @Stuartsoft. Credito in cui è dovuto il credito. – bkbeachlabs
Si risponde molto bene allo here. Praticamente utilizza questo ragazzo pratico: [transizione UIViewWithView: durata: opzioni: animazioni: ^() completamento: ^()];
Usa di transizione con vista
[UIView transitionWithView:backButton
duration:0.5f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
[backButton setTitleColor:[_peacock lighten:d.primary] forState:UIControlStateNormal];
}
completion:^(BOOL finished){
}];
Funziona alla grande.Inoltre, puoi usare una vista genitore come obiettivo principale e quindi animare tutte le viste secondarie nel modo desiderato nel blocco 'animazioni' – Peterdk
È possibile utilizzare due pulsanti (o etichette, ecc) con colori diversi che messi a stessa posizione:
button1 = UIButton(frame: frame)
button2 = UIButton(frame: frame) // same frame
button1.setTitleColor(UIColor.redColor(), forState: .Normal) // red
button2.setTitleColor(UIColor.blueColor(), forState: .Normal) // blue
Dopo di che si può raggiungere l'animazione di colori per animazione di transizione di button2:
UIView.animateKeyframesWithDuration(
1.0, delay: 0, options: [.Autoreverse, .Repeat],
animations: {
UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.5, animations: {
self.button2.alpha = 1.0
})
UIView.addKeyframeWithRelativeStartTime(0.5, relativeDuration: 0.5, animations: {
self.button2.alpha = 0.0
})
}, completion: nil)
Il collegamento è interrotto, sarebbe un buon esempio ... – user1506145
Il collegamento non è interrotto ... – CodaFi