为什么我的计时器每毫秒都会消失?

时间:2014-10-03 13:32:57

标签: ios objective-c nstimer

您好,我的计时器有问题,而且我不明白问题出在哪里我的问题出现在我的计时器消失的每一英里或几秒钟,看起来我不明白为什么:

 - (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];

}

感谢所有功能帮助。

1 个答案:

答案 0 :(得分:3)

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