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

Dar*_*ren 36 iphone xcode animation ios

我有一个标签显示一个数字,我想将其更改为更高的数字,但我想为它添加一些耀斑.我想让数字增加到更高的数字,并且容易进入曲线,因此它会加速然后变慢.这个答案显示了如何使它增加(第二个答案,而不是接受的答案),但我宁愿为它制作动画,这样我也可以使它稍微增大,然后再缩小,以及缓和曲线. 如何在iphone sdk中运行得分动画

任何想法如何最好地实现这一目标?谢谢

开始/结束编号将由用户输入,我希望它在相同的时间内递增结束编号.因此,如果我已经开始10结束100或开始10结束1000我希望它在5秒钟内计算结束数字.

Tim*_*Tim 68

我实际上只为这个名为UICountingLabel的类创建了一个类:

http://github.com/dataxpress/UICountingLabel

它允许您指定是否要将计数模式设置为线性,缓入,缓出或缓入/缓出.轻松进入/退出开始缓慢计数,加速,然后慢慢结束 - 所有这些都在您指定的任何时间内完成.

它目前不支持根据当前值设置标签的实际字体大小,但如果它是一个需要的功能,我可以添加支持.我的布局中的大多数标签没有很大的增长或缩小的空间,所以我不确定你想如何使用它.但是,它的行为与普通标签完全相同,因此您也可以自行更改字体大小.


mal*_*lex 17

您可以使用GCD将延迟转移到后台线程.

以下是值动画的示例(10秒内从1到100)

float animationPeriod = 10;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    for (int i = 1; i < 101; i ++) {
        usleep(animationPeriod/100 * 1000000); // sleep in microseconds
        dispatch_async(dispatch_get_main_queue(), ^{
            yourLabel.text = [NSString stringWithFormat:@"%d", i];
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 这给了我直接的价值..没有"动画"在swift 2.0任何想法为什么? (4认同)

Tra*_* M. 14

@ malex的答案在swift 3中.

func incrementLabel(to endValue: Int) {
    let duration: Double = 2.0 //seconds
    DispatchQueue.global().async {
        for i in 0 ..< (endValue + 1) {
            let sleepTime = UInt32(duration/Double(endValue) * 1000000.0)
            usleep(sleepTime)
            DispatchQueue.main.async {
                self.myLabel.text = "\(i)"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我强烈建议您只需从GitHub下载此类并将其拖入您的项目中,我已经使用它,因为我的代码中的时间似乎不适合更低/更高的计数数字.这个课程很棒,看起来很棒.请参阅此媒体文章以供参考.


Maa*_*ers 5

您可以使用标志来查看它是否必须上升或下降。使用 while 循环代替 for 循环。通过这种方式,您正在创建一个不断运行的循环,因此您还必须找到一种方法来停止它,例如按下按钮。