2012-06-18 2 views
1

시계가 계속 작동하는 반복 타이머가 있습니다. 시계가 멈추는 동안 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]; 
+0

타이머 도중 앱에서 스크롤이 발생합니까? 이는 타이머를 발사하거나 늦게 발사하지 못하게하는 다른 종류의 런 루프를 유발합니다. – kevboh

+0

예, 전체 게임은 스크롤을 기반으로합니다! 시계는 0.01 초마다 업데이트되기 때문에 타이머가 잘 작동합니다. .isValid 속성을 검사했는데 유효하므로 실행 루프 문제 여야합니다. 이것이 iPad에서만 다른 이유는 무엇입니까? 그리고 주위를 돌아 다니기 위해 무엇을 할 수 있습니까? (다른 실행 루프에서 타이머를 실행 하시겠습니까?) – Darren

+0

죄송합니다. 스크롤하지 않고 UISliders를 사용하고 있습니다. – Darren

답변

1

만들기 타이머를 +timerWith... 방법을 사용하여 예약하지 않고 실행 루프에서 직접 실행 루프를 실행하려면 [[NSRunLoop currentRunLoop] addTimer:timer forMode: NSRunLoopCommonModes]을 사용하여 모든 런 루프에서 실행하십시오. 그게 작동하는지 알려주세요.

+0

당신이 그것을 여기에 적기 바로 전에 그것을 시도했습니다. 내가 mainRunLoop과 currentRunLoop 모두 시도했지만 도움이되지 않습니다. 타이머가 잘 실행되고, 가끔 멈추지 않습니다. – Darren

+0

흠. 타이머 콜백이 다음과 같이 보이는지 확인하십시오. - (void) timerFireMethod : (NSTimer *) theTimer. – kevboh

+0

나는 지금 매우 어리 석다. 타이머에 문제가 없습니다! 내가 1 초 아래로 세고 있었기 때문에 알아 차리기 힘들었지 만 새 게임을 시작하기 전에 int를 0으로 재설정하지 않았습니다! 도! 죄송 합니다만 감사합니다. – Darren

0

게임의 경우 NSTimer 대신 CADisplayLink를 사용해야합니다.

관련 문제