"Calibrate" NSTimer UI 更新
"Calibrate" NSTimer for UI updates
我正在尝试为我的程序实现倒计时功能。这是一个秒计时器,所以我使用一个时间间隔为 1.0 秒的 NSTimer
对象来更新 UI。但为了不累积误差(每1.0秒间隔会产生一点延迟),程序计算UI.[=18中显示的剩余时间的当前时间与开始时间的绝对差值。 =]
问题是,在 NSTimer
对象运行了相当长的时间(比如半小时)后,由于累积误差,它不再 "synced" 具有绝对时间: UI 更新发生在两 "absolute" 秒之间。例如,如果倒计时从 00:00:00.000
开始,一开始 UI 会在 00:00:01.000
、00:00:02.000
更新……但过一会儿它会变成 00:30:03.567
之类的就这样。
知道我该如何处理吗?还有其他更好的方法来实现这个吗?谢谢!
一个高层次的想法是根据您的绝对时间计算来检测计时器何时过于不同步。当它超过一个特定的阈值时,比如 0.01 秒或任何你想要的,取消当前计时器并在适当的延迟后启动一个新的计时器 "in sync".
我正在尝试为我的程序实现倒计时功能。这是一个秒计时器,所以我使用一个时间间隔为 1.0 秒的 NSTimer
对象来更新 UI。但为了不累积误差(每1.0秒间隔会产生一点延迟),程序计算UI.[=18中显示的剩余时间的当前时间与开始时间的绝对差值。 =]
问题是,在 NSTimer
对象运行了相当长的时间(比如半小时)后,由于累积误差,它不再 "synced" 具有绝对时间: UI 更新发生在两 "absolute" 秒之间。例如,如果倒计时从 00:00:00.000
开始,一开始 UI 会在 00:00:01.000
、00:00:02.000
更新……但过一会儿它会变成 00:30:03.567
之类的就这样。
知道我该如何处理吗?还有其他更好的方法来实现这个吗?谢谢!
一个高层次的想法是根据您的绝对时间计算来检测计时器何时过于不同步。当它超过一个特定的阈值时,比如 0.01 秒或任何你想要的,取消当前计时器并在适当的延迟后启动一个新的计时器 "in sync".