Xcode中的秒表问题

时间:2012-02-28 17:17:00

标签: xcode4.2 nstimer stopwatch

您好我的应用程序中有秒表。

我有一个带秒表的启动,停止和重置按钮。

停止和重置按钮起作用

开始有点像。

当用户首次点击开始按钮时,它会启动秒表。如果他们点击停止按钮,然后单击开始按钮,它会重新启动秒表。

我缺少什么(下面列出的代码)?

·H

    IBOutlet UILabel *stopWatchLabel;
    NSTimer *stopWatchTimer; // Store the timer that fires after a certain time
    NSDate *startDate; // Stores the date of the click on the start button
    @property (nonatomic, retain) IBOutlet UILabel *stopWatchLabel;
    - (IBAction)onStartPressed;
    - (IBAction)onStopPressed;
    - (IBAction)onResetPressed;
    - (void)updateTimer

.m

    - (void)updateTimer{

    NSDate *currentDate = [NSDate date];
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"HH:mm:ss:SSS"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
    NSString *timeString=[dateFormatter stringFromDate:timerDate];
    stopWatchLabel.text = timeString;

    }

    - (IBAction)onStartPressed {
    startDate = [NSDate date];

    // Create the stop watch timer that fires every 10 ms
    stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0
                                                  target:self
                                                selector:@selector(updateTimer)
                                                userInfo:nil
                                                 repeats:YES];
    }

    - (IBAction)onStopPressed {
    [stopWatchTimer invalidate];
    stopWatchTimer = nil;
    [self updateTimer]; 
    }

    - (IBAction)onResetPressed {
    stopWatchLabel.text = @"00:00:00:000";
    }

任何帮助都会很棒。

干杯

2 个答案:

答案 0 :(得分:1)

在上面的代码中,您将存储启动 - 停止操作期间经过的时间。为此,您需要在类级别NSTimeInterval totalTimeInterval变量。最初或按下复位按钮时,其值将设置为0.在updateTimer方法中,您需要替换以下代码。

NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
totalTimeInterval += timeInterval;
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:totalTimeInterval ];

谢谢,

答案 1 :(得分:0)

timeInterval会增加,如1,2,3,4,5等。

totalTimeInterval = totalTimeInterval + timeInterval -> 0 = 0 + 1 

下次调用updateTimer函数时,totalTimeInterval将为1 = 1 + 2,因此totalTimeInterval将为3。

因此,如果我们显示totalTimeInterval,则秒数将为1,3,6,....等等。

  1. 首先,您需要在班级中使用NSTimeInterval totalTimeInterval和NSTimeInterval timeInterval变量

  2. updateTimer方法,您需要替换以下代码。

    timeInterval = [currentDate timeIntervalSinceDate:startDate];
    timeInterval += totalTimeInterval;
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
    
  3. 然后是onStopPressed方法和以下代码。

    totalTimeInterval = timeInterval;
    
  4. 感谢。