【发布时间】:2016-08-11 00:14:00
【问题描述】:
我正在尝试显示用作进度条的 UISlider。我希望 UISlider 的进度是系统媒体播放器中正在播放的歌曲的当前进度。
这是我的代码:
在我的 headers.h 文件中:
static MPMusicPlayerController *musicPlayer;
NSTimer * currentTimeUpdateTimer;
UISlider *timeSlider;
在加载视图中:
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 的意义在于还允许用户浏览正在播放的音乐。
【问题讨论】:
-
清理了标签。现在为您实际 使用的一种 语言添加标签(提示:您没有添加任何标签)。如果你不知道,最好不要写代码。
-
@Olaf 好的,抱歉。但我认为你需要看看你的语法。 “你最好不要写代码”没有意义。
-
"不理解" :D 无论如何,对我来说,你的实现没问题,我不明白为什么它不起作用。你试过 layoutSubview 吗?
-
这是一个编程语言网站。只要我的意思很清楚,并且我的程序语法没有问题,这里就不讨论这些缺陷。随意尝试德语。 (顺便说一句。你的引用是错误的。我写了“写”,这显然是错误的。
-
@RomOne 我把计时器实现放在 layoutSubviews 中我仍然得到相同的结果。
标签: ios objective-c