如何在 swift 中为 UILabel 中的递增数字设置动画

Posted

技术标签:

【中文标题】如何在 swift 中为 UILabel 中的递增数字设置动画【英文标题】:How to animate incrementing number in UILabel in swift 【发布时间】:2016-07-22 01:54:54 【问题描述】:

我有一个显示数字的标签,我想将其更改为更高的数字,但是,我想给它添加一点闪光。我希望通过缓入曲线将数字增加到更高的数字,这样它就会加速然后减速。请,如何快速实现这一点,这是我的代码。谢谢。

 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)
    

【问题讨论】:

您能更准确地描述一下它的外观吗?应该例如旧值淡出而新值淡入同一位置?还是应该在新的上交时将旧的转一旁,就像用捡拾器一样?或者你的目标是什么? 可能重复:***.com/questions/33632266/… 【参考方案1】:

我对 swift 并不完全熟悉。但我之前使用抛物线实现了这一点。

在细节上或多或少是基本代数。您有一个图表,其中一个轴上的值为 x,时间轴上的值为 y。您希望每个动画之间的时间延迟增加,直到达到平稳状态。

例如:

x=1 延迟=100ms,x=2 延迟=200ms,x=3 延迟=310ms,x=4 延迟=430ms

请注意,每次增加都比上一次增加。

在数学上要得到这样的斜率,你可以坐在一个公式前面,例如:

y = -x + x^2

并玩弄它直到你得到一个输出,这样对于 x 的每一个增量,你的延迟对应于一个很好的减速,在动画上看起来很干净。

谢天谢地,Apple 包含的库可以做到这一点,我通过快速搜索找到了它:

 UIViewAnimationOptions.CurveEaseOut

这个库会给你一个快速启动然后减速的曲线,这是Apple Documentation的其余部分

【讨论】:

【参考方案2】:

请检查:

func countAnimation(timer: NSTimer)

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


【讨论】:

以上是关于如何在 swift 中为 UILabel 中的递增数字设置动画的主要内容,如果未能解决你的问题,请参考以下文章

如何大写来自 Swift 子类的 UILabel 的文本属性

如何快速下划线 UILabel?

如何在 uilabel 中使用多行并根据 Swift 中的标签高度自动扩展 uitableview 行高?

如何比较 Swift 中的字符?我有带有文本和 UITextField 的 UILabel

如何覆盖子类的 swift 协议函数(例如 UIView 中的 UILabel)

如何使用 Swift 以编程方式创建 UILabel?