我目前正在开发一个音乐应用程序,但我遇到了进度条滑块的问题。
self.musicPlayer
是[MPMusicPlayerController applicationMusicPlayer]
self.currentlyPlayingTotalDuration
是NSNumber
self.currentlyPlayingTimeSlider
是UISlider
在MPMusicPlayerController
中挑选新歌时,会执行以下代码。在这种方法中(并非显示所有这些),我将我的音乐播放器设置为播放所选歌曲(工作)并播放(工作)。然后我将歌曲的总持续时间设置为滑块的最大值(工作)
self.currentlyPlayingTotalDuration = [[NSNumber alloc] initWithFloat:(int)[NSValue valueWithPointer:[self.musicPlayer.nowPlayingItem valueForKey:MPMediaItemPropertyPlaybackDuration]]];
[self.currentlyPlayingTimeSlider setMaximumValue:self.currentlyPlayingTotalDuration.floatValue];
我已记录值以查看值是否设置正确(它们)
NSLog(@"Number:%@", [NSNumber numberWithFloat:(int)[NSValue valueWithPointer:[self.musicPlayer.nowPlayingItem valueForKey:MPMediaItemPropertyPlaybackDuration]]]);
NSLog(@"Max:%f", self.currentlyPlayingTimeSlider.maximumValue);
日志输出在下面,看起来应该
2011-08-24 13:38:25.004 App [1241:707] Number:1107392
2011-08-24 13:38:25.009 App [1241:707] Max:1400544.000000
然后我将currentlyPlayingTimeSlider
值设置为0以启动(工作)
self.currentlyPlayingTimeSlider.value = 0.0;
接下来,我将updateSliderTime
方法设置为每秒调用一次,将进度条再移动一秒钟(工作)
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateSliderTime:) userInfo:nil repeats:YES];
updateSliderTime
方法的完整方法代码如下所示, 无效 ,即使每秒调用
- (void)updateSliderTime:(NSTimer *)timer {
[self.currentlyPlayingTimeSlider setValue:[[NSNumber numberWithDouble:self.musicPlayer.currentPlaybackTime] floatValue]];
}
此外,我调用我在Interface Builder中设置的valueChanged
事件的方法如下所示。它也 无效
- (IBAction)sliderChanged:(id)sender {
[self.musicPlayer setCurrentPlaybackTime:[[NSNumber numberWithFloat:self.currentlyPlayingTimeSlider.value] doubleValue]];
}
任何人都可以帮我弄清楚我做错了什么吗?它必须是最后两种方法中的东西,因为第一种方法称为罚款。我没有其他任何地方定制/搞乱滑块。
答案 0 :(得分:3)
您是否检查过IBAction
被调用(可能是NSLog
)?如果没有,请确保设置Slider的委托。
否则,请检查我对this问题的回答,该回答非常相似。
答案 1 :(得分:1)
想出来。除了设置滑块的最大值之外,一切都在实际应用。我奇怪地把它转换了。而不是:
self.currentlyPlayingTotalDuration = [[NSNumber alloc] initWithFloat:(int)[NSValue valueWithPointer:[self.musicPlayer.nowPlayingItem valueForKey:MPMediaItemPropertyPlaybackDuration]]];
我应该使用:
self.currentlyPlayingTotalDuration = [self.musicPlayer.nowPlayingItem valueForKey:MPMediaItemPropertyPlaybackDuration];
该值已经是一个数字。感谢Mundi激励我记录价值。当我这样做时,我意识到它已经浮出水面了。傻我:)。