2016-04-02 5 views
7

У меня есть ярлык с номером, и я хочу изменить его на большее число, однако я хотел бы добавить немного вспышки к нему. Я бы хотел, чтобы число увеличилось до большего числа с кривой легкости в выходе, поэтому оно ускоряется, а затем замедляется. Пожалуйста, как это реализовать быстро, вот мой код. Благодарю.Как оживить увеличивающееся число в UILabel в 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

Можете ли вы описать немного более точно, как это должно выглядеть? Следует, например, старое значение исчезает, в то время как новый исчезает в одном месте? Или должен ли старый отворачиваться, пока новый входит, как с помощью сборщика? Или какова ваша цель? –

+0

Возможный дубликат: http://stackoverflow.com/questions/33632266/animate-text-change-of-uilabel – NikxDa

ответ

3

Я не совсем знаком с быстрым. Но я использовал это ранее, используя параболическую кривую.

Подробнее более или менее то, что происходит, является базовой алгеброй. У вас есть график со значением x на одной оси, а затем y на оси времени. Вы хотите, чтобы временная задержка между каждой анимацией увеличивалась, пока не достигнет плато.

Например:

х = 1 задержки = 100 мс, х = 2 задержка = 200 мс, х = 3 Задержка = 310ms, х = 4 Задержка = 430ms

обратите внимание, что каждое увеличение более чем предыдущая.

Математически, чтобы получить такой наклон, можно сидеть перед формулой типа:

у = х + х^2

enter image description here

и играть с ним вокруг, пока вы получите такой вывод, что для каждого приращения x ваша задержка соответствует хорошему замедлению, которое будет выглядеть чистым при анимации.

К счастью, компания Apple, как включены библиотеки, которые будут делать это, я нашел его с быстрым поиском:

UIViewAnimationOptions.CurveEaseOut 

Эта библиотека даст вам кривую, которая начинается быстро, то замедляется, вот остальная часть Apple Documentation

1

Пожалуйста, проверьте следующее:

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

} 
Смежные вопросы