시계가 계속 작동하는 반복 타이머가 있습니다. 시계가 멈추는 동안 stopTimer를 호출하면 시계가 멈춰야합니다. 이것은 iPhone에서 100 % 작동하지만 iPad에서는 때때로 타이머를 중지하지 못합니다. 이것은 약 50 %의 시간이 걸립니다. NSLog는 stop 메소드에서 호출됩니다.NSTimer는 iPad에서는 무효화되지 않지만 iPhone에서는 정상적으로 작동합니다.
여기 내 타이머 코드입니다 : 난 그냥 다른 질문/대답 제안으로이 같은 타이머를 실행 시도
- (void)startSliderTimer
{
// Get start time
[self stopTimer];
startTime = [NSDate timeIntervalSinceReferenceDate] + kmaxTimePerSlider;
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.01f target:self selector:@selector(updateClock) userInfo:nil repeats:YES];
}
- (void)updateClock
{
NSTimeInterval currentTimer = [NSDate timeIntervalSinceReferenceDate];
NSTimeInterval currentTimeLeft = startTime - currentTimer;
if (currentTimeLeft >= 0) {
int seconds = currentTimeLeft;
float milliseconds = currentTimeLeft - seconds;
int mill = milliseconds * 1000;
NSString* displayTime = [NSString stringWithFormat: @"%02d:%03d",seconds,mill];
timerLbl.text = displayTime;
} else {
[self tooSlow];
}
}
- (void) stopTimer
{
NSLog(@"%s",__FUNCTION__);
if (self.timer) {
NSLog(@"Stop Timer");
[self.timer invalidate];
self.timer = nil;
}
}
하지만 여전히 항상 무효화하지 않습니다
self.timer = [NSTimer timerWithTimeInterval:0.01f target:self selector:@selector(updateClock) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
타이머 도중 앱에서 스크롤이 발생합니까? 이는 타이머를 발사하거나 늦게 발사하지 못하게하는 다른 종류의 런 루프를 유발합니다. – kevboh
예, 전체 게임은 스크롤을 기반으로합니다! 시계는 0.01 초마다 업데이트되기 때문에 타이머가 잘 작동합니다. .isValid 속성을 검사했는데 유효하므로 실행 루프 문제 여야합니다. 이것이 iPad에서만 다른 이유는 무엇입니까? 그리고 주위를 돌아 다니기 위해 무엇을 할 수 있습니까? (다른 실행 루프에서 타이머를 실행 하시겠습니까?) – Darren
죄송합니다. 스크롤하지 않고 UISliders를 사용하고 있습니다. – Darren