sanchessd Postado 2 de janeiro de 2012 Denunciar Compartilhar Postado 2 de janeiro de 2012 Boa dia, sou novo em desenvolvimento IOS, meu primeiro APP está sendo um player para o grupo de radios que eu trabalho, estou tendo problemas com o Timer, (contador de tempo que a radio está em execução), segue o codigo: - (void)updateProgress:(NSTimer *)updatedTimer{ if (streamer.bitRate != 0.0) { int horas = 0; int minutos = 0; double progress = (streamer.progress); positionLabel.text = [NSString stringWithFormat:@"00:%.0f", progress]; if (progress > 59) { minutos = (progress+1)/60; if (((progress)-(minutos*60)) <=8) { [positionLabel setText:[NSString stringWithFormat:@"%d:0%.0f", minutos, progress-((minutos*60)-1)]]; } else{ [positionLabel setText:[NSString stringWithFormat:@"%d:%.0f", minutos, progress-((minutos*60)-2)]]; } if (minutos > 60) { horas = progress /3600; minutos = progress/60; [positionLabel setText: [NSString stringWithFormat:@"%d:%d:%.0f", horas,minutos-(horas*3600), progress-(minutos*60)]]; } } else { [progressSlider setEnabled:NO]; } } else { positionLabel.text = @"00:0"; }}[/CODE]A contagem entra em segundos, tenho que exibir no formato hh/mm/ss.o problema é que a apartir do 1 min ele conta até 1:61 só depois troca o minuto para 2:00 e continua a contagem normalmente, mas segue contando até 61 segundos, e não até 59 segundos, a lógica do meu codigo está errada, mas não consegui achar o problema, estou começando agora com programação.Desde já agradeço! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Artur Felipe Postado 2 de janeiro de 2012 Denunciar Compartilhar Postado 2 de janeiro de 2012 (editado) seu problema do timer vc pode resolver simplesmente assim ... startDate = [NSDate date]; [NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(numberTick:) userInfo:nil repeats:YES]; //vai disparar o método a cada 1 seg- (void)numberTick:(id)sender { NSDate *currentDate = [NSDate date]; NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"HHmmss"]; [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; NSString *newClock=[dateFormatter stringFromDate:timerDate];}[/CODE]ai só adaptar para sua interface. Editado 2 de janeiro de 2012 por Artur Felipe Citar Link para o comentário Compartilhar em outros sites More sharing options...
sanchessd Postado 2 de janeiro de 2012 Autor Denunciar Compartilhar Postado 2 de janeiro de 2012 (editado) Certo em viewController.h criei : IBOutlet UILabel *positionLabel;NSDate *startDate;- (void)numberTick:(id)sender;[/CODE]Em ViewController.m[CODE]startDate = [NSDate date]; [NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(numberTick:) userInfo:nil repeats:YES];[/CODE]coloquei o timer pra iniciar junto com o Streaming.em seguida a implementação[CODE]- (void)numberTick:(id)sender { NSDate *currentDate = [NSDate date]; NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"HHmmss"]; [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; NSString *newClock=[dateFormatter stringFromDate:timerDate];}[/CODE]mas eu quero fazer o timer sair na "positionLabel" qual é a variavel para que eu possa atribuir ao IBOutlet ? Editado 2 de janeiro de 2012 por sanchessd Citar Link para o comentário Compartilhar em outros sites More sharing options...
Artur Felipe Postado 2 de janeiro de 2012 Denunciar Compartilhar Postado 2 de janeiro de 2012 (editado) mas eu quero fazer o timer sair na "positionLabel" qual é a variavel para que eu possa atribuir ao IBOutlet ? positionLabel.text = newClock; Editado 2 de janeiro de 2012 por Artur Felipe Citar Link para o comentário Compartilhar em outros sites More sharing options...
sanchessd Postado 3 de janeiro de 2012 Autor Denunciar Compartilhar Postado 3 de janeiro de 2012 (editado) resolvi de uma forma diferente, estava pesquisando e achei uma formatação para a string - (void)updateProgress:(NSTimer *)updatedTimer{if (streamer.bitRate != 0.0){ int horas = streamer.progress /3600; int minutos = streamer.progress/60; int segundos = streamer.progress; segundos %= 60; positionLabel.text = [NSString stringWithFormat:@"%02i:%02i", minutos, segundos]; if (horas >= 1) { positionLabel.text = [NSString stringWithFormat:@"%i:%02i:%02i",horas, minutos, segundos]; }}else{ positionLabel.text = @"00:00";}}[/CODE]onde [CODE][NSString stringWithFormat:@"%02i:%02i...][/CODE]02 é o numero de casas usadas, caso nao for um numero de 2 digitos ele põe o zero na frente.Muito obrigado pela ajuda, talvez nos falaremos mais pra frente, pois estou começando agora e creio que precisarei de pessoas como voce.E espero que este topico seja util para pessoas que ainda nao conhecem esta formataçao para strings Editado 3 de janeiro de 2012 por sanchessd Citar Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Participe do debate
Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.