Не поймите это неправильно, но у вас есть один неудачный выбор дизайна в вашем коде: вы не должны полагаться на текст кнопки, чтобы сказать вам, что вы хотите сделать - если в какой-то момент в будущем вы локализуете свой приложение вам придется повторить таймер.
Тем не менее, вот как я бы реализовал секундомер: вам нужны две переменные экземпляра, NSTimer
timer и NSDate
startDate . Для функции круга вам понадобится еще один, NSMutableArray
кругов . С вашими двумя кнопками все в порядке, используя простую логику, вы можете решить, что делать при нажатии (непроверенный код!):
Кнопка Пуск / Стоп
if (!timer) {
self.startDate = [NSDate date];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 / 10.0
target:self
selector:@selector(updateTimer)
userInfo:nil
repeats:YES];
[self updateTimer];
// set button text to STOP and LAP
}
// there already is a timer, stopwatch running, so we want to stop
else {
if ([timer isValid]) {
[timer invalidate];
}
self.timer = nil;
[self updateTimer];
// set button text to START and RESET
}
Кнопка сброса / круга
// if we have a timer, we want to take a lap
if (timer) {
if (!laps) {
self.laps = [NSMutableArray array];
}
[laps addObject:[NSDate date]];
[self updateTimer];
}
// there is no timer, so we want to reset
else {
self.startDate = nil;
[self updateTimer];
// delete all laps
self.laps = nil;
}
Теперь вам нужно всего лишь изменить updateTimer , чтобы сделать то, что вы хотите. В updateTimer вы также должны проверить, равен ли startDate ноль или нет, прежде чем вычислять что-либо. Для кругов вы можете просто зациклить массив laps и вычислить разницу между startDate и датой в массиве или даже между датами в массиве.
Надеюсь, это поможет!