向iOS应用程序添加一个正在运行的计数显示计时器,如Clock秒表?

我正在使用一个以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];
}

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...