gpt4 book ai didi

ios - 如何在 Objective C 中重置计时器?

转载 作者:行者123 更新时间:2023-11-29 03:29:44 24 4
gpt4 key购买 nike

我在这个应用程序中创建了一个计数器,它在我点击一个按钮时开始,在我点击同一个按钮时停止。

问题是,当我重新开始时,显示计数的标签不会重置,它会从停止的地方开始计数。

所以有人可以帮助我吗??

- (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];

}

}

关于ios - 如何在 Objective C 中重置计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19966317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com