如何重置目标C中的计时器?
我在这个应用程序创build一个计数器,它开始时,我点击一个button,并停止当我点击相同的button。
问题是,当我再次启动时,显示计数的标签不会重置,从而停止计数。
所以任何人都可以帮助我?
- (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]; } }
嗨,我设法解决这个问题,编码是这样的:
- (void)timerTick:(NSTimer *)timer { NSDate *strStartTime = timer.userInfo; NSTimeInterval interval = -[strStartTime timeIntervalSinceNow]; NSLog(@"%.0f", interval); div_t h = div(interval, 3600); float hours = h.quot; div_t m = div(h.rem, 60); float minutes = m.quot; float seconds = m.rem; _lblCounter.text = [[NSString alloc] initWithFormat:@"%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 contador = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerTick:) userInfo:[NSDate date] 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 [contador 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]; } }