2013-08-23 16 views
1

초 및 밀리 초를 표시하는 카운트 다운 타이머를 만들려고 노력한 곳에서 운동을 시도했습니다. 아이디어는 타이머가 카운트 다운 타임을 UILable을 업데이트하는 NSString에 표시한다는 것입니다. 내가 현재 가지고초를 밀리 초로 계산 NSTimer

코드는

-(void)timerRun { 
    if (self.timerPageView.startCountdown) { 
     NSLog(@"%i",self.timerPageView.xtime); 

    self.timerPageView.sec = self.timerPageView.sec - 1; 

    seconds = (self.timerPageView.sec % 60) % 60 ; 
    milliseconds = (self.timerPageView.sec % 60) % 1000; 


    NSString *timerOutput = [NSString stringWithFormat:@"%i:%i", seconds, milliseconds]; 
    self.timerPageView.timerText.text = timerOutput; 

    if (self.timerPageView.resetTimer == YES) { 
     [self setTimer]; 
} 
} 
    else { 

    } 


} 

-(void)setTimer{ 
    if (self.timerPageView.xtime == 0) { 
     self.timerPageView.xtime = 60000; 
    } 
    self.timerPageView.sec = self.timerPageView.xtime; 
    self.timerPageView.countdownTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(timerRun) userInfo:Nil repeats:YES]; 
    self.timerPageView.resetTimer = NO; 
} 

    int seconds; 
    int milliseconds; 
    int minutes; 
} 

누구든지 내가 잘못 뭐하는 거지 어떤 아이디어를 가지고 무엇입니까?

+1

무슨 일입니까? – HalR

+1

프로그램이 충돌하고 있습니까? –

+1

작동하지 않는 것이 좋을까요? –

답변

4

초당 대략 100 회 (0.01 간격) 실행할 타이머가 있습니다.

매번 1의 값을 감소시킵니다. 따라서 self.timerPageView.sec 변수는 1/100 초로 표시됩니다.

:

는 시간 (초)을 얻으려면, 당신은 (밀리 초)을 얻으려면 (100)에 의해이 값을 분할해야, 당신은 1000

seconds = self.timerPageView.sec/100; 
milliseconds = (self.timerPageView.sec * 10) % 1000; 

업데이트로 모듈로 (10)를 곱해야

또한 타이머가 매우 부정확합니다. 타이머는 1 초마다 정확히 반복하지 않습니다. 초당 80 회 또는 다른 부정확 한 속도로만 실행될 수 있습니다.

더 나은 방법은 처음에 현재 시간을 얻는 것입니다. 그런 다음 timerRun 메소드에서 현재 시간을 다시 얻습니다. 두 숫자를 뺍니다. 그러면 실제 경과 시간이 표시됩니다. 각 루프 값을 감소시키지 않고 이것을 사용하십시오.

+0

int 초; int 밀리 초; int minutes; } – Evilelement

+0

예, 알고 있습니다. 하지만 내가 대답하는 것을 보시오?카운터는 밀리 초 또는 초 또는 분이 아닌 1/100 초 단위로 표시됩니다. 60000의 초기 값은 600 초 또는 10 분입니다. 이게 니가 원하는거야? – rmaddy

+0

millisecs는 작동하지만 초는 599부터 시작합니다. – Evilelement

3

이러한 계산은 매우 의심 보면 : 당신은 초 동안 부동 소수점 값을 INT 타입 계산 (구현에 꽤 스케치)를 사용하는

seconds = (self.timerPageView.sec % 60) % 60 ; 
milliseconds = (self.timerPageView.sec % 60) % 1000; 

.

NSUInteger seconds = (NSUInteger)(self.timerPageView.sec * 100); //convert to an int 
    NSUInteger milliseconds = (NSUInteger) ((self.timerPageView.sec - seconds)* 1000.); 
+0

'sec' 변수는 초 단위가 아닌 1/100 초 단위로 계산됩니다. – rmaddy

+0

(잘하면) Maddy의 의견을 기반으로 수정되었습니다. 나는 미치광이를 횡단하지 않는 것이 낫다. – HalR

+0

나는 그것이 무엇을 의미하는지 알지 못합니다. 미안하다. 너 내가 도움이되는 것을 좋아하지 않는다면. – rmaddy

3

시간 간격을 0.01으로 설정합니다. 매 10 밀리 초, 0.001은 밀리 초입니다.
그래도 NSTimer는 정확하지 않습니다. 아마 1ms마다 작동하지 않을 것입니다. 실행 루프에서 해고되므로 대기 시간과 지터가 발생합니다.

+0

그 문제의 해결책은 무엇입니까? – Evilelement

관련 문제