我正在尝试显示一个用作进度条的 UISlider。我希望 UISlider 的进度是系统媒体播放器中正在播放的歌曲的当前进度。
这是我的代码:
在我的 headers.h 文件中:
static MPMusicPlayerController *musicPlayer;
NSTimer * currentTimeUpdateTimer;
UISlider *timeSlider;
在加载 View 中:
musicPlayer = [MPMusicPlayerController systemMusicPlayer];
timeSlider = [[UISlider alloc] initWithFrame:CGRectMake((((scrollView.contentSize.width/2)+(scrollView.contentSize.width/12))-10), 100, (((scrollView.contentSize.width/2)-(scrollView.contentSize.width/6))+20), 80)];
timeSlider.backgroundColor = [UIColor clearColor];
timeSlider.minimumTrackTintColor = [UIColor whiteColor];
timeSlider.maximumTrackTintColor = [UIColor blackColor];
timeSlider.alpha = 0.8;
timeSlider.exclusiveTouch = YES;
[scrollView addSubview:timeSlider];
在viewDidLoad中:
currentTimeUpdateTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateCurrentiPodItemTime) userInfo:NULL repeats:YES];
userIsScrubbing = NO;
这些是控制和设置UISlider的值的函数
- (void)updateCurrentiPodItemTime {
MPMediaItem *nowPlayingItem = [musicPlayer nowPlayingItem];
if (nowPlayingItem == nil) {
} else {
double currentTime = musicPlayer.currentPlaybackTime;
if (!userIsScrubbing)
timeSlider.value = (float) currentTime;
}
}
- (void)handleScrubberTouchDown:(id)sender {
userIsScrubbing = YES;
}
- (void)handleScrubberTouchUp:(id)sender {
userIsScrubbing = NO;
}
- (void)handleScrub:(id)sender {
musicPlayer.currentPlaybackTime = timeSlider.value;
}
但是发生的是 UISlider 值总是满的,并且不会随着歌曲的进行而进步。
UISlider 的意义在于还允许用户在正在播放的音乐中滑动。
最佳答案
我已经解决了。 uislider 的最大值为 1。因此我将最大值设置为歌曲的总长度(以秒为单位)。
关于ios - 系统媒体播放器进度作为 UISlider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38885437/