2017-04-04 2 views
0

ProgressView ne se met pas à jour pendant la lecture de la chanson. En lisant à partir d'autres messages, j'ai utilisé une méthode de mise à jour pour mettre à jour à chaque intervalle de temps. J'ai un bouton de lecture qui est également utilisé pour appeler la méthode updateTime:.UIProgressView ne se met pas à jour pour Audio Player?

- (IBAction)playButton:(id)sender { 
[musicPlayer play]; 

[NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES]; 

NSTimeInterval interval = musicPlayer.currentTime/musicPlayer.duration; 
NSLog(@"%f",interval); 
} 

Le updatetime: Méthode

-(void)updateTime:(NSTimer *)timer { 
trackProgress.progress = (musicPlayer.currentTime/musicPlayer.duration); 
} 

Je suis très nouveau à la programmation et même débordement pile. C'est la première question que je poste. S'il vous plaît aidez-moi et merci d'avance.

Répondre

0

tout d'abord la valeur de la minuterie de changement:

// Modifier la valeur à 0,5 ou 1 sec

[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES]; 

Assurez-vous que vous définissez comme trackProgress 0 comme valeur initiale.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    trackProgress.progress = 0.0; 
    } 

Espérons que cela va résoudre votre problème.

+0

Cela ne fonctionne pas. Quand je joue, la barre de progression passe de la position zéro à peu en avant, mais après cela, elle redevient stagante. – Finch

+0

Pouvez-vous vérifier quelle est la valeur flottante finale que vous obtenez pour cette division: (musicPlayer.currentTime/musicPlayer.duration). –

+0

Lorsque j'ai inséré une instruction NSLog dans la méthode updateTime:, la valeur float commence à partir de 0.0 et la valeur flottante finale est 0.999081. Mais à la fin de la piste de fin quand j'ai vérifié quand la musique s'est arrêtée, il était 0,002723, puis soudainement sauté à 0,993965 et terminé à 0,999081. – Finch

-1

Cela pourrait aider. Créez un Timer et ajoutez-le à common runloop comme indiqué ci-dessous. Gardez également une référence à la minuterie afin qu'elle puisse être arrêtée plus tard.

self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES]; 
[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; 
+0

* Les temporisations planifiées * sont implicitement ajoutées à la boucle d'exécution. – vadian

0

Assurez-vous de mettre à jour la vue des progrès sur le thread principal

-(void)updateTime:(NSTimer *)timer { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     self.trackProgress.progress = (musicPlayer.currentTime/musicPlayer.duration); 
    }); 
}