系统媒体播放器作为UISlider的进展

时间:2016-08-11 00:14:00

标签: ios objective-c

我正在尝试显示充当进度条的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的目的还在于允许用户擦洗正在播放的音乐。

1 个答案:

答案 0 :(得分:1)

我解决了这个问题。 uislider的最大值是1.所以我将最大值设置为歌曲的总长度(以秒为单位)。