我正在尝试显示充当进度条的UISlider。我希望UISlider的进展成为系统媒体播放器中播放歌曲的当前进度。
这是我的代码:
在我的headers.h文件中:
static MPMusicPlayerController *musicPlayer;
NSTimer * currentTimeUpdateTimer;
UISlider *timeSlider;
在loadView中:
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的目的还在于允许用户擦洗正在播放的音乐。
答案 0 :(得分:1)
我解决了这个问题。 uislider的最大值是1.所以我将最大值设置为歌曲的总长度(以秒为单位)。