我有一个9位数,需要每秒钟增加500,但我决定每毫秒增加一个数字,并更新显示数字的标签。我使用的是NSTimer,但正如我在各地看到的那样,它们是不准确的,也不是命中注定的。我试过使用CFAbsoluteTimeGetCurrent,但没能让它正常工作。简单地使用NSTimer产量和不准确的值。每次用户打开应用程序时,增量都不会停止,它只是将值相加,然后再次开始递增。有什么想法吗?
更新:
尽管大多数答案都指向正确的方向,但我解决了我的问题有点不同。感谢所有的回答和马丁。
我使用的是CADisplayLink而不是NSTimer,得到了非常准确和稳定的结果。现在请注意,我说得很漂亮,因为结果并不完全准确,但是在我的例子中,我增加了一个9位数--它们并不明显,而且当视图再次出现时,我的数字就会被纠正。
发布于 2016-01-02 10:18:25
考虑使用CADisplayLink来更新您的界面--它给出了自绘制上一帧以来所传递的时间的非常准确的数字,这样您就可以始终保持UILabel的最新更新,而不管您的框架有多高或多低。
发布于 2016-01-02 11:47:04
你可以得到精确
timer = [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(countup)userInfo:nil repeats:YES];发布于 2016-01-02 10:05:55
只使用计时器作为触发器来更新屏幕,不要依赖于每次火灾之间的确切时间。
保留一个表示开始时间的NSDate,并在计时器触发时使用当前日期来计算差异并更新标签。
https://stackoverflow.com/questions/34564551
复制相似问题