Ir para conteúdo
Visualizar no app

Uma forma melhor de navegar. Saiba mais.

MM Fórum

Um app em tela cheia na sua Tela de Início com notificações push, avisos e mais.

Para instalar este app no iOS/iPadOS
  1. Toque no ícone de Compartilhamento no Safari
  2. Role o menu e toque em Adicionar à Tela de Início.
  3. Toque em Adicionar no canto superior direito.
Para instalar este app no Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

Postado

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!

  • Respostas 4
  • Visualizações 963
  • Criado
  • Última resposta

Top Postadores Neste Tópico

Postado

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

Postado
  • Autor

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

Postado

mas eu quero fazer o timer sair na "positionLabel" qual é a variavel para que eu possa atribuir ao IBOutlet ?

positionLabel.text = newClock;

Editado por Artur Felipe

Postado
  • Autor

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

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…

Quem Está Navegando 0

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

Conta

Navegação

Buscar

Buscar

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.