Primeiro, crie uma constante para lidar com a duração do tempo limite em segundos e uma instância NSTimer para detecção de inatividade.
// in your SomeViewController.h file
// ...
#define kTimeoutUserInteraction 3
// ...
NSTimer *idleTimer;
Em .m, adicionando essas funções
// in your SomeViewController.m file
// ...
# pragma mark timer
- (void)resetIdleTimer {
if (!idleTimer) {
idleTimer = [NSTimer scheduledTimerWithTimeInterval:kTimeoutUserInteraction target:self selector:@selector(idleTimerExceeded) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:idleTimer forMode:NSDefaultRunLoopMode];
} else {
if (fabs([idleTimer.fireDate timeIntervalSinceNow]) < kTimeoutUserInteraction - 1.) {
idleTimer.fireDate = [NSDate dateWithTimeIntervalSinceNow:kTimeoutUserInteraction];
}
}
}
- (void)idleTimerExceeded {
idleTimer = nil;
// do something
[self resetIdleTimer];
}
- (UIResponder *)nextResponder {
[self resetIdleTimer];
return [super nextResponder];
}
// ...
em suma, nextResponder
é chamado em toda interação do usuário. Em resetIdleTimer
, idleTimer
é verificado idleTimer
se está desatualizado ou não, e será renovado se estiver desatualizado. \ do something
é chamado quando o cronômetro é excedido.