2016-07-16 5 views
0

У меня есть кнопка, на которой я разместил UITapGestureRecognizer. Когда я нажимаю на эту кнопку, я вызываю метод, который запускает время. Мой вопрос: я могу получить строку таймера на ярлыке. Но таймер начинается с текущего времени, и я хочу запустить таймер всегда с нуля (например, таймер обратного отсчета). Ниже приведен мой код для таймера.Как запустить таймер с нуля в iOS

-(IBAction)micPressed{ 
if (gestureRecognizer.state==UIGestureRecognizerStateBegan) { 
    gestureRecognizer.view.alpha=0.2f; 

    [label setHidden:NO]; 

    if (!_timer) { 
     _timer = [NSTimer scheduledTimerWithTimeInterval:0.1f 
                target:self 
               selector:@selector(_timerFired:) 
               userInfo:nil 
               repeats:YES]; 
    } 
} 
else{ 
    [label setHidden:YES]; 

    gestureRecognizer.view.alpha=10.2f; 
    if ([_timer isValid]) { 
     [_timer invalidate]; 
    } 
    _timer = nil; 
} 

} 

- (void)_timerFired:(NSTimer *)timer { 

NSDateFormatter *dateformatter=[[NSDateFormatter alloc]init]; 
[dateformatter setDateFormat:@"mm:ss:SSS"]; 

NSString *dateInStringFormated=[dateformatter stringFromDate:[NSDate dateWithTimeIntervalSinceNow:0]]; 
NSLog(@"%@",dateInStringFormated); 
[label setText:dateInStringFormated]; 
} 

Возможно, кто-нибудь предложит мне решение. Любая помощь приветствуется.

+0

Проверьте мой ответ. Он начнется с нуля, как вам нужно! – Lion

ответ

0

Ваш код должен быть как,

NSDateFormatter *dateformatter=[[NSDateFormatter alloc]init]; 
[dateformatter setDateFormat:@"mm:ss:SSS"]; 

NSString *dateInStringFormated=[dateformatter stringFromDate:[dateformatter dateFromString:@"00:00:000"]]; 
NSLog(@"test : %@",dateInStringFormated); 

Я только Ставить [NSDate dateWithTimeIntervalSinceNow:0] с [dateformatter dateFromString:@"00:00:000"] ,

Он начнется с нуля всегда.

Update:

Я думаю, что вы хотите что-то вроде таймера, которые обновляют минуты, секунды и миллисекунды, как я понимаю ваш вопрос сейчас.Вы можете достичь это что-то вроде,

Расписания таймера, как,

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES]; 

Теперь ваши updateTimer должно быть, как

-(void)updateTimer{ 

static double counter = 0; 

static int counter2 = 0; 


int seconds = (int)counter % 60; 
int minutes = ((int)counter/60) % 60; 


NSLog(@"%02d:%02d:%03d",minutes,seconds,counter2); // This should be your labels text that updating continuously 




counter = counter + 0.01; 
counter2++; 

if (counter2 == 100) { 
    counter2 = 0; 
} 
} 

Надеется, что это поможет :)

+0

таймер начинается с нуля, но он остается неизменным на протяжении всего (00: 00: 000). пожалуйста помоги. – ammy1

+0

@ ammy1: проверьте мое обновление в ответ. – Lion

+0

За вашу помощь и время – ammy1

0

Проблема заключается в том, что вы запускаете свой таймер из самого текущего времени. Чтобы сделать таймер обратного отсчета. Вам нужно сделать следующее:

  1. Возьмите int с именем Counter и инициализировать его от 0
  2. Огня вашего NSTimer и в то время увеличивает счетчик
  3. дисплея значение счетчика в UILabel тексте.
  4. Как только ваш NSTimer остановится, снова сделайте его 0.

Вот и все! Вот как вы можете достичь желаемого результата.

Код:

int counter = 0; 

- (void)_timerFired:(NSTimer *)timer { 
    counter++; 
} 

После NSTimer является недействительным снова сделать его counter = 0

+0

Я попробовал, но счетчик просто увеличивается на единицу. Я хочу, когда я нажимаю и удерживаю нажатие, я хочу, чтобы таймер работал (увеличивался), пока я не отпустил кнопку. – ammy1

+0

извините, мой ошибка. Я установил повторы в НЕТ. я изменил его, и таймер увеличивается. Но я хочу, чтобы таймер в этом формате - (мм: ss: SSS), можете ли вы помочь мне в этом. – ammy1

0

Помните время, когда вы запустили таймер:

_startDate = [NSDate date]; 
_Timer = ... 

Затем используйте интервал времени с даты начала в методе _timerFired:

NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init]; 
NSString *dateInStringFormatted = [formatter stringFromTimeInterval:[[NSDate date] timeIntervalSinceDate:_startDate]]; 
Смежные вопросы