У меня есть простой метод таймера обратного отсчета, который запускается, когда пользователь нажимает кнопку.UIButton многократно запускает методы при быстром нажатии на UIButton
Когда пользователь нажимает кнопку, таймер обратного отсчета начинает отсчет каждую секунду. Но я заметил, что если вы нажмете кнопку быстрого нажатия на кнопку, метод будет работать несколько раз, заставляя таймер обратного отсчета ускоряться и выходить из себя. Если вы просто нажмете один раз с помощью «расслабленного» щелчка, он работает так, как должен.
Теперь я попытался отключить кнопку после щелчка, но это отключает кнопку только одним нажатием, проблема все же возникает, если я нажимаю кнопку несколько раз и быстро.
Вот мои методы:
#pragma mark -
#pragma mark startTimerButtonClicked
- (IBAction)startTimerButtonClicked:(UIButton *)sender
{
if (!self.timerIsRunning) // Run timer only if it's not allready running
{
[self setupTimer]; // Start the timer
}
else
{
NSLog(@"Timer should pause with secondsCounter: %d and not continue to run", secondsCounter);
}
}
#pragma mark -
#pragma mark setupTimer
- (void)setupTimer
{
/* -- Timer -- */
self.timerWorkOutCountDown = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(startTimer)
userInfo:nil
repeats:YES];
}
#pragma mark -
#pragma mark Start timer
- (void)startTimer
{
self.timerIsRunning = YES;
secondsCounter = workOutSecondsCounter - 1;
int minutes = secondsCounter/60;
int seconds = secondsCounter - (minutes * 60);
NSString *timerOutput = [NSString stringWithFormat:@"00:%02d",seconds];
[labelTimerCountDown setText:timerOutput];
if (secondsCounter == 0)
{
[self resetTimerWithCount:0 andString:@"00:00"];
}
}
#pragma mark -
#pragma mark Reset timer
- (void)resetTimerWithCount:(int)count andString:(NSString *)string
{
self.timerIsRunning = NO;
secondsCounter = count;
[timerWorkOutCountDown invalidate];
timerWorkOutCountDown = nil;
[labelTimerCountDown setText:string];
}
#pragma mark -
#pragma mark resetTimerButtonClicked
- (IBAction)resetTimerButtonClicked:(UIButton *)sender
{
[self resetTimerWithCount:20 andString:@"00:20"];
NSLog(@"Reset timer secondsCounter: %d", secondsCounter);
}
Я предполагаю, что есть некоторый контроль вы можете сделать, чтобы сделать кнопку только запустить таймер один раз, я пытался с "buttonClickTracker"
, но это не решило проблема. Я бы очень хотел, чтобы этот сценарий с быстрым щелчком произошел, поэтому я был бы рад за любую помощь, которую я могу получить. :)
Огромное вам спасибо за помощь и объяснение этому мне @Jason Coco, это решило проблему! – Oskariagon