#objective-c #xcode
#objective-c #xcode
Вопрос:
Я создал таймер, но если я заблокирую экран, таймер остановится… как я могу заставить его работать, когда я блокирую?
-(void)timeRun{
secondsCount = secondsCount - 1;
int minuts = secondsCount / 60;
int seconds = secondsCount - (minuts * 60);
NSString *timerOutput = [NSString stringWithFormat:@"-:%.2d", minuts, seconds];
TimerDisplay.text = timerOutput;
if (secondsCount == 0) {
[countdownTimer invalidate];
countdownTimer = nil;
AudioServicesPlaySystemSound(PlaySoundID);
}
}
Запустите таймер здесь
-(IBAction)Start:(id)sender{
secondsCount = perVrem;
countdownTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeRun) userInfo:nil repeats:YES];
}
Здесь я установил время 5 минут
-(IBAction)fivemin:(id)sender{perVrem = 300;
TimerDisplay.text = [NSString stringWithFormat:@"05:00"];}
Ответ №1:
Сложно ответить без дополнительного контекста, но вам может понадобиться
UIApplication.sharedApplication.idleTimerDisabled = NO;
или, может быть, вам нужно использовать
dispatch_after
или, может быть, вам нужно использовать настенные часы и просто использовать таймер для обновления некоторого пользовательского интерфейса.
Ваш выглядит как последний, т. е.. используйте настенные часы и таймер только для обновления. Если вы отсчитываете 5 минут точно, у вас будет время начала и окончания, и вы будете использовать таймер только для обновления пользовательского интерфейса время от времени. Таким start
образом, становится что-то вроде
-(IBAction)Start:(id)sender{
self.start = NSDate.date.timeIntervalSinceReferenceDate;
countdownTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeRun) userInfo:nil repeats:YES];
}
и timeRun что-то вроде
-(void)timeRun{
secondsCount = (x)( NSDate.date.timeIntervalSinceReferenceDate - self.start 0.5 ); // Add a bit to get rounding right, depends on your types
...
где x
будет, например int
, или long
в зависимости от secondsCount
.