我目前正在编写一个基于Apple one的音乐应用程序,我想为它添加一个进度条。
如何制作进度条来显示在我的应用程序上默认的iOS的iPod应用程序中播放的音乐的进度?
发布于 2011-10-24 18:26:50
您可能想看看MPMusicPlayerController类引用--特别是currentPlayBackTime
属性。从来没有玩过它,但看起来你想把它以某种方式呈现在界面上。
发布于 2012-06-07 23:47:54
这就是我在声明这些变量的头文件中实现的方法。
NSTimer * currentTimeUpdateTimer;
'UISlider *timeSlider;
BOOL userIsScrubbing;
- (IBAction)handleScrubberTouchDown:(id)sender;
- (IBAction)handleScrubberTouchUp:(id)sender;
- (IBAction)handleScrub:(id)sender;
在viewDidLoad方法下的主文件中,我运行了一个NSTimer currentTimeUpdateTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateCurrentiPodItemTime) userInfo:NULL repeats:YES];
userIsScrubbing = NO;
在那之后,这是一个更新一切的问题。
- (void)updateCurrentiPodItemTime {
MPMediaItem *nowPlayingItem = [self.musicPlayer nowPlayingItem];
if (nowPlayingItem == nil) {
self.minLabel.text = @"00:00";
} else {
NSNumber *duration = [nowPlayingItem valueForProperty:MPMediaItemPropertyPlaybackDuration];
double currentTime = self.musicPlayer.currentPlaybackTime;
self.minLabel.text = [NSString stringWithFormat: @"%02d:%02d", (int) currentTime / 60, (int) currentTime % 60];
self.maxLabel.text = [NSString stringWithFormat: @"%02d:%02d", [duration intValue] / 60, [duration intValue] % 60];
if (!userIsScrubbing)
self.timeSlider.value = (float) currentTime;
}
}
- (IBAction)handleScrubberTouchDown:(id)sender {
userIsScrubbing = YES;
}
- (IBAction)handleScrubberTouchUp:(id)sender {
userIsScrubbing = NO;
}
- (IBAction)handleScrub:(id)sender {
self.musicPlayer.currentPlaybackTime = timeSlider.value;
}
发布于 2011-10-24 18:55:07
添加一个计时器,每秒触发一次(1.0),并让它调用一个方法来更新进度条,如下所示:
- (void) updateProgressBar:(NSTimer *) timer {
if (currentPlaybackTime != lengthOfSong) {
[self.progressBar setValue:self.musicPlayer.currentTime];
}
else {
[timer invalidate], timer = nil;
[self.progressBar setValue:lengthOfSong];
}
}
https://stackoverflow.com/questions/7880006
复制