Ir para conteúdo
  • Cadastre-se
Entre para seguir isso  
sanchessd

[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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

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.

Entre para seguir isso  

  • 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
      48.555
    • Total de Posts
      415.253
×
×
  • Criar Novo...