为什么我的UISlider的更新功能不能在MPMusicPlayerController中设置当前播放时间?

时间:2011-08-24 21:02:35

标签: iphone ios uislider mpmusicplayercontroller

设置

我目前正在开发一个音乐应用程序,但我遇到了进度条滑块的问题。

self.musicPlayer[MPMusicPlayerController applicationMusicPlayer]

self.currentlyPlayingTotalDurationNSNumber

self.currentlyPlayingTimeSliderUISlider


概述

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]];
}

任何人都可以帮我弄清楚我做错了什么吗?它必须是最后两种方法中的东西,因为第一种方法称为罚款。我没有其他任何地方定制/搞乱滑块。

2 个答案:

答案 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激励我记录价值。当我这样做时,我意识到它已经浮出水面了。傻我:)。