【发布时间】:2013-11-26 19:03:45
【问题描述】:
我在这个应用程序中创建了一个计数器,当我单击一个按钮时它会启动,当我单击同一个按钮时它会停止。
问题是当我重新开始时,显示计数的标签不会重置,它会从停止的地方开始计数。
那么任何人都可以帮助我吗??
- (void)timerTick:(NSTimer *)timer {
_lblCounter.text = @"0:00:00";
double seconds = 0.0;
double minutes = 0.0;
double hours = 0.0;
ticks += 1.0;
seconds = fmod(ticks, 60.0);
minutes = fmod(trunc(ticks / 60.0), 60.0);
hours = trunc(ticks / 3600.0);
_lblCounter.text = [NSString stringWithFormat:@"%2.0f:%02.0f:%02.0f", hours, minutes, seconds];
}
- (IBAction)btnProcessa:(UIButton *)sender {
if ([sender.titleLabel.text isEqualToString:@"Iniciar"]) {
//Zera contador
_lblCounter.text = @"0:00:00";
//Define hora de início
_startTime = [NSDate date];
//Exibe hora inicial formatada no Label
NSString *strHoraInicial = [[self formatter] stringFromDate:_startTime];
_lblStartTime.text = strHoraInicial;
//Contador
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerTick:) userInfo:nil repeats:YES];
//Modifica botão
[sender setTitle:@"Encerrar" forState:UIControlStateNormal];
[sender setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
NSLog(@"Hora de início: %@", strHoraInicial);
} else {
//Para contador
[timer invalidate];
//Define a hora do encerramento
NSDate *currentTime = [NSDate date];
//Exibe hora final formatada no Label
NSString *strHoraFinal = [[self formatter] stringFromDate:currentTime];
_lblEndTime.text = strHoraFinal;
//Calcula a diferença e exibe no Label
NSTimeInterval elapsedTime = [currentTime timeIntervalSinceDate:_startTime];
double cost = elapsedTime / 3600.0 * 5.0;
NSString *valor = [[NSString alloc] initWithFormat:@"R$ %.2f",cost];
NSLog(@"%@", valor);
_lblValorPagar.text = valor;
float fltQtdPessoa = [_txtQtdPessoa.text floatValue];
float fltValor = cost / fltQtdPessoa;
NSString *strValor = [[NSString alloc] initWithFormat:@"R$ %.2f", fltValor];
_lblValorPessoa.text = strValor;
//Modifica Botão
[sender setTitle:@"Iniciar" forState:UIControlStateNormal];
[sender setTitleColor:[UIColor colorWithRed:0.208 green:0.710 blue:0.271 alpha:1.000] forState:UIControlStateNormal];
}
}
【问题讨论】:
-
你在哪里重置计数器(即将
ticks设置回0)? -
我尝试将 _lblCounter.text 设置为 @"0:00:00"
-
_blCounter.text(显示)不是滴答声ticks(计数器)。当_lblCounter.text = [NSString stringWithFormat:@"%2.0f:%02.0f:%02.0f", hours, minutes, seconds];再次运行时会发生什么? -
另外,考虑使用
NSDate *timerStartTime(和标准区间数学)并去掉计数器(ticks)。 -
当我再次运行时,显示屏会继续计数,但不会重置为 0:00:00。如果我使用时间间隔计算,我将如何转换结果,因为它以秒为单位转换为 0:00:00 的格式?通过创建一个 NSFormatter 实例?
标签: ios objective-c nstimer stopwatch