以不同的时间间隔更改uilabel文本

时间:2012-03-23 14:57:35

标签: iphone uilabel nstimer

我正在为iPhone构建一个简单的健身/训练应用程序。用户可以从表中选择一种训练课程,该表将他们带到包含秒表的视图控制器。此视图具有从可变数组填充的标签。

我可以让秒表工作,并从阵列中填充初始标签,但无法确定如何在设定的时间间隔内更改标签。这些间隔不会是常规的,因此可能是10分钟,然后是25分钟,然后是45等等。我一直试图通过If语句来执行此操作,例如,计时器== 25。我确信这是一个基本的解决方案,但我是编程新手,无法解决问题。

定时器代码如下:

    - (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.S"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
    NSString *timeString=[dateFormatter stringFromDate:timerDate];
    timerLabel.text = timeString;
}

启动计时器:

- (IBAction)startTimerButton:(id)sender {

    if (timer == nil) {
        startDate = [NSDate date];  

        // Create the stop watch timer that fires every 0.1s

        timer = [NSTimer scheduledTimerWithTimeInterval:1.0/10
                                                 target:self
                                               selector:@selector(updateTimer)
                                               userInfo:nil
                                                repeats:YES];

    } 

    else {
        return;
    }
}

1 个答案:

答案 0 :(得分:0)

我不太清楚你在追求什么。如果您将时间间隔设置为10分钟/ 25分钟等而不是1.0 / 10,那么在您的时间点击代码中,您将知道计时器的时间间隔是什么。

您始终可以使用timeInterval实例方法查询时间间隔。也许如下。

- (void)updateTimer:(NSTimer*)timer
{
    if ([timer timeInterval] == 10 * 60) // 10 minutes have elapsed
    {
        // Do something for this timer.
    }
    else if ([timer timeInterval] == 20 * 60) // 20 minutes have elapsed
    {
    }
}

请注意,我已将计时器添加为updateTimer函数的参数。然后,您必须在@selector(update:)方法中使用scheduledTimerWithTimeInterval(末尾带冒号!)选择器。当你的回调选择器被调用时,它将传递给它定时器。

或者如果你有一个指向你在'startTimerButton'中创建的计时器的指针,你可以按如下方式使用:

- (void)updateTimer:(NSTimer*)timer
{
    if (timer == myTenMinuteTimer) // 10 minutes have elapsed
    {
        // Do something for this timer.
    }
    else if (timer == myTwentyMinuteTimer) // 20 minutes have elapsed
    {
    }
}

请注意,在第二个原因中,您将指针与两个对象进行比较并使用它,在第一个原因中,您将比较两个对象的方法值,因此对象不一定必须是指针到同一个对象,以便评估为真。

希望这有帮助!