2014-10-03 114 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

请提供错误响应 – 2014-10-03 13:41:32

+5

这是一块讨厌的代码 – 2014-10-03 13:54:36

+0

您能否提供诸如'reset:'和'pause :'。另外,问题实际上是什么? – Chris 2014-10-03 14:20:17

回答

3

您应该知道,NSTimer不会授予您调用选择器的重复时间间隔(在您的情况下为1.1)的绝对准确度。换句话说,你应该计算当前和以前的选择器调用之间的差异,这将是确切的时间间隔

+0

是的,我现在谈到这个我只是把1.1看起来更好,当我的计时器开始进行更新时,在这个问题每秒都会消失并出现 – 2014-10-07 20:23:54