2016-04-02 31 views
7

Ho un'etichetta che mostra un numero e voglio cambiarlo a un numero più alto, tuttavia, vorrei aggiungere un po 'di flare. Mi piacerebbe che il numero aumentasse fino al numero più alto con una curva di facilità in entrata, quindi accelera e rallenta. Per favore, come implementare questo in rapido, Ecco il mio codice. Grazie.Come animare il numero di incremento in UILabel in swift

let newValue : Double = 1000 
let oldValue : Double = 500 

timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("countAnimation:"), userInfo: ["oldValue":oldValue, "newValue": newValue], repeats: true) 

func countAnimation(timer: NSTimer) 
{ 
    let dict = timer.userInfo as? [String:AnyObject] 
    var OldTotalValue : Double = (dict!["oldValue"] as? Double)! 
    let newTotalValue : Double = (dict!["newValue"] as? Double)! 

    OldTotalValue = OldTotalValue + 10 


    if newTotalValue < OldTotalValue 
    { 
     timer.invalidate() 
    } 
    else 

    { 
     mylabel.text = String(OldTotalValue) 
    } 
} 
+0

Può descrivere un po 'più preciso come dovrebbe apparire? Dovrebbe ad es. il vecchio valore svanisce mentre quello nuovo sfuma nello stesso punto? O il vecchio dovrebbe girarsi mentre il nuovo si gira, come con un picker? O qual è il tuo obiettivo? –

+0

Possibile duplicato di: http://stackoverflow.com/questions/33632266/animate-text-change-of-uilabel – NikxDa

risposta

3

Non ho completamente familiarità con Swift. Ma l'ho implementato in precedenza usando una curva parabolica.

In dettaglio più o meno quello che sta succedendo è l'algebra di base. Hai un grafico con un valore x su un asse e poi y sull'asse del tempo. Si desidera che il ritardo di tempo tra ogni animazione aumenti fino a raggiungere un plateau.

Ad esempio:

x = 1 ritardo = 100ms, x = 2 delay = 200ms, x = 3 delay = 310ms, x = 4 ritardo = 430ms

avviso che ogni aumento è superiore al precedente.

Matematicamente per ottenere una tale pendenza, si può sedere davanti a una formula come ad esempio:

y = -x + x^2

enter image description here

e giocare con esso fino a che ottieni un output tale che per ogni incremento di x il tuo ritardo corrisponda a un bel rallentamento che sembrerà pulito su un'animazione.

Fortunatamente Apple come biblioteche comprese che faranno questo, ho trovato con una rapida ricerca:

UIViewAnimationOptions.CurveEaseOut 

Questa libreria vi darà una curva che si avvia rapidamente poi rallenta, ecco il resto della Apple Documentation

1

si prega di controllare questo:

func countAnimation(timer: NSTimer) 
{ 
    UIView.transitionWithView(label, 
          duration: 1.0, 
          options: [.CurveEaseInOut], 
          animations: {() -> Void in 
          // Write your code here 
    }, completion: nil) 

}