代码之家  ›  专栏  ›  技术社区  ›  Crystal

iPhone中的简单计时器

  •  0
  • Crystal  · 技术社区  · 15 年前

    我正在尝试使用TimeIntervalsIncerencedATE,我不太确定我是否理解正确。我基本上有一个按钮来计算按下开始和停止按钮之间的时间差。

    - (IBAction)startButtonPressed {
        startButtonFlag = !startButtonFlag; // first time through, startButtonFlag turns on
        if (startButtonFlag) { // timer starts
            [startButton setTitle:@"Stop" forState:UIControlStateNormal];
            startTime = [NSDate timeIntervalSinceReferenceDate];
            NSLog(@"start time: %d", startTime);
        }
        else { // timer stops
            [startButton setTitle:@"Start" forState:UIControlStateNormal]; 
            stopTime = [NSDate timeIntervalSinceReferenceDate];
            NSLog(@"stop time: %d", stopTime);      
            elapsedTime = stopTime - startTime;
            NSLog(@"elapsed time: %d", elapsedTime);
        }
    
    }
    

    我不太明白结果。我的样本输出是: 开始时间:558828278 停止时间:581239552 运行时间:-1610612736

    我按了“开始”后不久(大约5秒钟)就按了“停止”按钮。我原以为停车时间会更像558828283,所以当我减去这两次,看有多少时间过去了,我会得到5秒。我是不是误解了类方法的工作原理?谢谢。

    3 回复  |  直到 15 年前
        1
  •  1
  •   user467105 user467105    15 年前

    startTime、stopTime和elapsedTime是否声明为NSTimeInterval或double类型?

    在这种情况下,你应该使用 %f %d (用于ints)。

        2
  •  1
  •   AndersK    15 年前

    你可以试试这样的方法:

    NSDate* start = [NSDate date];
    ...
    
    NSDate* stop = [NSDate date];
    NSLog(@"took %lf seconds", [stop timeIntervalSinceDate:start]);
    
        3
  •  0
  •   Rushil    15 年前

    你使用了错误的功能:

    [NSDate timeIntervalSinceReferenceDate];
    

    你应该用一些像

    dateWithTimeIntervalSinceNow
    

    创建并返回NSDate对象,该对象设置为当前日期和时间的给定秒数。