Actualización de AVPlayer currentTime para un UISlider cuando ViewController carga

Estoy jugando canciones en AVPlayer . He creado un controller de vista separada para mi reproductor de medios e initialization y todos los methods que estoy usando para el reproductor (reproducir, pausar, repetir, mezclar) están allí en el mismo controller de vista.

Actualizo un control deslizante como este

 [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(sliderUpdate:) userInfo:nil repeats:YES];` -(void)sliderUpdate:(id)sender { int currentTime = (int)((song.player.currentTime.value)/song.player.currentTime.timescale); slider.value=currentTime; NSLog(@"%i",currentTime); song.currentTime=currentTime; int currentPoint=(int)((song.player.currentTime.value)/song.player.currentTime.timescale); int pointMins=(int)(currentPoint/60); int pointSec=(int)(currentPoint%60); NSString *strMinlabel=[NSString stringWithFormat:@"%02d:%02d",pointMins,pointSec]; lblSlidermin.text=strMinlabel; song.strslidermin=strMinlabel; } 

Una vez que salgo del viewcontroller y cuando vuelvo, la canción se está reproduciendo, pero el problema es que el control deslizante no se está actualizando. Así que creé una class singleton para asignar los detalles de la canción que se están reproduciendo actualmente. También dentro de la actualización del slider asigné playerCurrentTime (valor de stream continua) para una variable de class singleton. Y mi método viewdidload que asigné como este

  if (song.isPlaying==NO) { [self prePlaySong]; } else{ lblAlbum.text=song.currentAlbum; lblArtist.text=song.currentArtist; lblSong.text=song.currentSong; slider.value=song.currentTime; slider.maximumValue=song.sliderMax; slider.minimumValue=song.sliderMin; imgSong.image=song.songImage; [btnMiddle setBackgroundImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal]; } 

pero el control deslizante no se actualiza. ¿Por qué es así cómo puedo resolver este problema? por favor, ayúdame

No debe usar un timer para esto, AVPlayer proporciona una API en la que observa la hora.

Registre un observador (por ejemplo, en viewWillAppear ) así:

 CMTime interval = CMTimeMakeWithSeconds(1.0, NSEC_PER_SEC); // 1 second self.playbackTimeObserver = [self.player addPeriodicTimeObserverForInterval:interval queue:NULL usingBlock:^(CMTime time) { // update slider value here... }]; 

Para anular el logging del observador (por ejemplo, en viewDidDisappear ), haga lo siguiente:

 [self.player removeTimeObserver:self.playbackTimeObserver]; 

Espero que ayude.