【问题标题】:Objective-c stringWithFormat Timer [duplicate]Objective-c stringWithFormat Timer [重复]
【发布时间】:2014-04-03 09:20:38
【问题描述】:

我正在尝试让计时器显示像这样“00:00:00”的计数器。这是我当前的代码。我一直在尝试使用 stringWithFormat 让它工作,这应该很容易,但我想我必须单独设置格式。你们有什么想法吗?

- (void)TimerCount {
    CountNumber = CountNumber + 1;
    TimerDisplay.text = [NSString stringWithFormat:@"Hour: %0*i", length, hour];
}

【问题讨论】:

  • 您的代码与您的请求(格式)不符。你大概想要小时、分钟和秒?你在哪里计算它们?什么是 length 和 hour (int / float)?
  • 我已经在 .h 文件中设置了它们,但实际上我认为这样效果更好:
  • '-(void)TimerCount{ CountNumber = CountNumber + 1; TimerDisplay.text = [NSString stringWithFormat:@"%.4d", CountNumber]; }'
  • 有点乱,但我希望你明白我的意思。您知道如何设置小时、分钟和秒吗?
  • 您想要一个计时器从零开始计时吗?计时器每秒触发一次?

标签: objective-c nstimer stringwithformat


【解决方案1】:
- (void)timerCount {

 {
    CountNumber = CountNumber + 1;
    NSInteger seconds = CountNumber % 60;
    NSInteger minutes = (CountNumber / 60) % 60;
    NSInteger hours = (CountNumber / 3600);
    TimerDisplay.text =  [NSString stringWithFormat:@"%i:%02i:%02i", hours, minutes, seconds];
}

试试上面的代码。

并将此方法配置为每秒触发一次。

在 viewDidLoad 中

NSTimer *counterTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 
                                                        target:self 
                                                      selector:@selector(timerCount) 
                                                      userInfo:nil 
                                                       repeats:YES];
[[NSRunLoop mainRunLoop] addTimer: counterTimer forMode:NSRunLoopCommonModes];

如果您使用的是 ARC,请将 counterTimer 保留为 iVar 以使其保持活动状态,直到 VC 被释放。

【讨论】:

  • 但我正在使用按钮,请查看这两个链接。 CodeFile 是 .m 文件,AppCode2 是 .h 文件。 dropbox.com/s/euzcos4vz64q86q/CodeFile.docx dropbox.com/s/9vixxlsuq6iogla/AppCode2.zip
  • 事实证明它仍然有效! :)
  • 我提到按钮的原因是因为那时我不需要 viewDidLoad 代码,但无论如何它可以工作! :)
【解决方案2】:
- (void)TimerCount
{
    CountNumber++;
    NSString *time = [[NSString alloc] init];
    NSUInteger seconds = CountNumber;
    NSUInteger minutes = 0;
    NSUInteger hours = 0;
    if (seconds > 59) {
        seconds -= 60;
        minutes++;
        if (seconds < 10) {
            time = [NSString stringWithFormat:@":0%i",seconds];
        } else time = [NSString stringWithFormat:@":%i",seconds];
    }
    if (minutes > 59) {
        minutes -= 60;
        hours++;
        if (minutes < 10) {
            time = [NSString stringWithFormat:@":0%i%@",minutes,time];
        } else time = [NSString stringWithFormat:@":%i%@",minutes,time];
    }
    if (hours < 10) {
        time = [NSString stringWithFormat:@"0%i%@",hours,time];
    } else time = [NSString stringWithFormat:@"%i%@",hours,time];

}

NSString *time 是时间。

还有 NSTimer 每秒调用一次这个方法:

NSTimer *counterTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 
                                                        target:self 
                                                      selector:@selector(timerCount) 
                                                      userInfo:nil 
                                                       repeats:YES];

【讨论】:

  • 我不明白为什么我对此投了反对票。这就是答案。
  • 我也不知道为什么。我没有投反对票。我会检查代码,看看它是否有效。
  • @Weeb 使用 NSTimer 每秒调用一次这个方法。
  • 我相信它可以完美运行。我的一些其他代码只需要适合此代码。这是完整的 .m 代码:​​dropbox.com/s/euzcos4vz64q86q/CodeFile.docx
  • void TimerCount 现在可以工作,但我只需要其他代码来适应 TimerCount 中的新代码。当我现在按下按钮(开始、停止和重置)时,什么也没有发生,但这基本上只是 TimerCount void 工作的一个指标,但在新代码已实施到 TimerCount void 后,其他代码只需要进行一些编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 2012-05-19
  • 2023-04-08
  • 2015-08-25
相关资源
最近更新 更多