我正在使用一个以5秒为增量处理设备运动事件和更新界面的应用程序.我想在应用程序中添加一个指示器,显示应用程序运行的总时间.看起来像一个秒表式的计数器,像本地iOS时钟应用程序是一种合理的方式来计算应用程序已经运行的时间,并将其显示给用户.
我不知道的是这种秒表的技术实现.这就是我在想的:
>如果我知道界面更新之间有多长时间,我可以在事件之间加上秒数,并将秒计数作为局部变量.或者,0.5秒间隔调度定时器可以提供计数.
>如果我知道应用程序的开始日期,我可以使用[[NSDate dateWithTimeInterval:(NSTimeInterval)sinceDate:(NSDate *)]将每个接口更新的本地变量转换为日期
>我可以使用具有短时间风格的NSDateFormatter,使用stringFromDate方法将更新的日期转换为字符串
>生成的字符串可以分配给接口中的标签.
>结果是针对应用程序的每个“tick”更新秒表.
在我看来,这个实现有点太重了,并不像秒表应用程序那么流畅.是否有更好的,更互动的方式来计算应用程序运行的时间?也许iOS已经提供了一些这样的东西?
解决方法
几乎什么@terry路易斯建议,但一个算法调整:
1)安排定时器
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerTick:) userInfo:nil repeats:YES];
2)当定时器触发时,获取当前时间(这是调整,不要计数ticks,因为如果定时器中有摆动,tick计数将累积错误),然后更新UI.此外,NSDateFormatter是一种更简单和更通用的格式来显示时间的方法.
- (void)timerTick:(NSTimer *)timer { NSDate *now = [NSDate date]; static NSDateFormatter *dateFormatter; if (!dateFormatter) { dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter.dateFormat = @"h:mm:ss a"; // very simple format "8:47:22 AM" } self.myTimerLabel.text = [dateFormatter stringFromDate:now]; }