我正在为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;
}
}
答案 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
{
}
}
请注意,在第二个原因中,您将指针与两个对象进行比较并使用它,在第一个原因中,您将比较两个对象的方法值,因此对象不一定必须是指针到同一个对象,以便评估为真。
希望这有帮助!