iDi*_*Dia 8 avfoundation uislider ios avplayer
我正在播放歌曲AVPlayer.我为我的媒体播放器和初始化创建了一个单独的视图控制器,我在播放器中使用的所有方法(播放,暂停,重复,随机播放)都在同一个视图控制器中.
我像这样更新一个滑块:
[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;
}
Run Code Online (Sandbox Code Playgroud)
一旦我走出viewcontroller并再次来,歌曲正在播放,但问题是滑块没有更新.所以我创建了一个单例类来分配当前播放的歌曲细节.同样在滑块更新中,我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];
}
Run Code Online (Sandbox Code Playgroud)
但是滑块没有得到更新.为什么这样以及如何解决这个问题?
chr*_*ris 22
您不应该使用计时器,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...
}];
Run Code Online (Sandbox Code Playgroud)
要取消注册观察者(例如,在viewDidDisappear),请执行:
[self.player removeTimeObserver:self.playbackTimeObserver];
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
11215 次 |
| 最近记录: |