当ViewController加载时,UISlider的AVPlayer currentTime更新

我正在播放AVPlayer歌曲。 我为我的媒体播放器和初始化创build了一个独立的视图控制器,并且我为播放器使用的所有方法(播放,暂停,重复,随机播放)都在同一个视图控制器中。

我更新像这样的滑块

 [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; } 

一旦我走出视图控制器,当再来,歌曲播放,但问题是滑块不更新。 所以我创build了一个单独的类来分配当前播放的歌曲细节。 同样在滑块内部更新我为singleton类variables赋值playerCurrentTime(slidercurrent值)。 而我的viewdidload方法我这样分配

 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]; } 

但滑块没有得到更新。 为什么我可以解决这个问题。 请帮帮我

您不应该为此使用定时器, AVPlayer提供您观察时间的API。

注册一个观察者(例如在viewWillAppear )像这样:

 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... }]; 

要取消注册观察者(例如在viewDidDisappear ),请执行以下操作:

 [self.player removeTimeObserver:self.playbackTimeObserver]; 

希望有所帮助。