2014-10-03 2 views
1

안녕하세요 내 타이머에 문제가 있고 난 이해가 안 내 문제는 모든 milesecunds 또는 내 타이머가 사라지고 표시 초에있는 문제입니다 이해하지 않는 이유 :밀리 초 및 초마다 타이머가 사라지는 이유는 무엇입니까?

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.BtnA.transform = CGAffineTransformMakeRotation(M_PI); 
    _timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(substractTime) userInfo:nil repeats:YES]; 
    [self reset:nil]; 
} 

    - (IBAction)touchBtnA:(id)sender { 
    if (enabledA) { 
     [self.BtnA setEnabled:NO]; 
     [self.BtnB setEnabled:YES]; 
     enabledA = NO; 
     enabledB = YES; 
     [self.BtnA setAlpha:0.33]; 
     [self.BtnB setAlpha:1.0]; 
    } else { 
     [self.BtnA setEnabled:YES]; 
     [self.BtnB setEnabled:NO]; 
     enabledA = YES; 
     enabledB = NO; 
     [self.BtnB setAlpha:0.33]; 
     [self.BtnA setAlpha:1.0]; 
    } 
} 

    - (IBAction)touchBtnB:(id)sender { 
    if (enabledB) { 
     [self.BtnB setEnabled:NO]; 
     [self.BtnA setEnabled:YES]; 
     enabledB = NO; 
     enabledA = YES; 
     [self.BtnB setAlpha:0.33]; 
     [self.BtnA setAlpha:1.0]; 

    } else { 
     [self.BtnB setEnabled:YES]; 
     [self.BtnA setEnabled:NO]; 
     enabledB = YES; 
     enabledA = NO; 
     [self.BtnA setAlpha:0.33]; 
     [self.BtnB setAlpha:1.0]; 
    } 
} 

    - (void)substractTime { 
    if (enabledA) { 
     _remainingTimeA--; 
     if (_remainingTimeA == 0) 
     { 
      [self pause:nil]; 
      [self.BtnA setEnabled:NO]; 
     } 
     [self updateTime:A]; 
    } 

    if (enabledB) { 
     _remainingTimeB--; 
     if (_remainingTimeB == 0) 
     { 
      [self pause:nil]; 
      [self.BtnB setEnabled:NO]; 
     } 
     [self updateTime:B]; 
    } 
} 

    - (void)updateTime: (TimerType)type { 
    NSInteger time = type == A ? _remainingTimeA : _remainingTimeB; 
    NSInteger minutes = time/600; 
    NSInteger seconds = (time/10) % 60; 
    NSInteger milliseconds = time % 10; 
    if (type == A) 
    { 
     [self.BtnA setTitle:[NSString stringWithFormat:@"%02d:%02d:%01d",minutes, seconds, milliseconds] forState:UIControlStateNormal]; 
    } 
    else 
    { 
     [self.BtnB setTitle:[NSString stringWithFormat:@"%02d:%02d:%01d",minutes, seconds, milliseconds] forState:UIControlStateNormal]; 

    } 
} 

- (IBAction)pause:(id)sender { 
enabledA = enabledB = NO; 

}

- (IBAction)reset:(id)sender { 
enabledA = enabledB = NO; 
[self.BtnA setEnabled:YES]; 
[self.BtnB setEnabled:YES]; 
_remainingTimeA = _remainingTimeB = 6000; 
[self updateTime:A]; 
[self updateTime:B]; 
[self.BtnA setAlpha:1.0]; 
[self.BtnB setAlpha:1.0]; 

} 모든 기능에 도움을

감사합니다.

+0

오류 응답을 제공하십시오. –

+5

이것은 불쾌한 코드 중 하나입니다. –

+0

'reset :'및 'pause'와 같은 메소드를 제공 할 수 있습니까? :'. 또한, 실제로 문제는 무엇입니까? – Chris

답변

3

당신은 NSTimer가 호출 선택기의 반복 간격 (귀하의 경우 1.1)에 대한 절대적인 정확성을 부여하지 않는다는 것을 알아야합니다. 즉, 현재와 이전 선택기 호출의 차이를 정확히 계산해야합니다.

+0

예 이제 타이머에 대한 업데이트가 시작되고 매초마다 문제가 사라질 때마다 1.1을 넣었습니다. 나타나는 –

관련 문제