首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在iOS应用程序中添加一个正在运行的计数显示计时器,比如时钟秒表?

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

Stack Overflow用户
提问于 2012-08-22 15:23:24
回答 2查看 20.5K关注 0票数 14

我正在使用一个应用程序来处理设备运动事件,并在5秒内更新接口。我想在应用程序中添加一个指示符,显示应用程序运行的总时间。看起来像秒表一样的计数器,比如原生的iOS时钟应用程序,是一种合理的方式来计算应用程序运行的时间并将其显示给用户。

我不确定的是这种秒表的技术实现。我是这么想的:

  • 如果我知道界面更新之间的间隔时间,可以将事件之间的秒数相加,并将秒计数为局部变量。或者,0.5秒间隔计划计时器可以提供计数。
  • 如果我知道应用程序的开始日期,我可以使用[[NSDate dateWithTimeInterval:(NSTimeInterval) sinceDate:(NSDate *)]将每个接口更新的局部变量转换为日期。
  • 我可以使用短时间样式的NSDateFormatter使用stringFromDate方法将更新的日期转换为字符串。
  • 生成的字符串可以分配给接口中的标签。
  • 其结果是,秒表是更新的每一个“滴答”的应用程序。

在我看来,这个实现有点重,不像秒表应用那样流畅。有没有一种更好、更交互式的方法来计算应用程序运行的时间?也许iOS已经为此目的提供了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-22 15:45:25

泰瑞·刘易斯(Terry)建议的几乎是这样的,但通过算法的调整:

1)安排计时器

代码语言:javascript
复制
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerTick:) userInfo:nil repeats:YES];

2)当计时器触发时,获取当前时间(即调整,不要计数滴答,因为如果计时器中有抖动,则滴答计数会累积错误),然后更新UI。此外,NSDateFormatter是一种更简单、更通用的方式来格式化显示时间。

代码语言:javascript
复制
- (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];
}
票数 22
EN

Stack Overflow用户

发布于 2012-08-22 15:38:16

如果您查看基本横幅项目中的苹果的iAd示例代码,它们有一个简单的定时器:

代码语言:javascript
复制
NSTimer *_timer; 
_timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timerTick:) userInfo:nil repeats:YES];

他们所拥有的方法

代码语言:javascript
复制
- (void)timerTick:(NSTimer *)timer
{
    // Timers are not guaranteed to tick at the nominal rate specified, so this isn't technically accurate.
    // However, this is just an example to demonstrate how to stop some ongoing activity, so we can live with that inaccuracy.
    _ticks += 0.1;
    double seconds = fmod(_ticks, 60.0);
    double minutes = fmod(trunc(_ticks / 60.0), 60.0);
    double hours = trunc(_ticks / 3600.0);
    self.timerLabel.text = [NSString stringWithFormat:@"%02.0f:%02.0f:%04.1f", hours, minutes, seconds];
}

它从一开始就开始运行,非常基本。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12076409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档