Ir para conteúdo
  • Cadastre-se

[Duvida]Timer de reprodução para um player de rádio


Posts Recomendados

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!

Link para o comentário
Compartilhar em outros sites

  • Respostas 4
  • Criado
  • Última resposta

Top Postadores Neste Tópico

Dias Populares

Top Postadores Neste Tópico

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 por Artur Felipe
Link para o comentário
Compartilhar em outros sites

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 por sanchessd
Link para o comentário
Compartilhar em outros sites

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 por sanchessd
Link para o comentário
Compartilhar em outros sites

Participe do debate

Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.

Visitante
Responder este tópico…

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Limpar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.



  • Estatísticas do Fórum

    • Total de Tópicos
      56.5k
    • Total de Posts
      466.3k
×
×
  • Criar Novo...