使用MPMusicPlayerController,将musicPlayer.currentPlaybackTime设置为seek但第二个生效

时间:2010-03-04 12:21:56

标签: iphone seek mpmusicplayercontroller

我有一个UISlider充当洗涤器。拖动拇指后,我执行以下操作:

- (void) _seekTo:(double)playbackTime {
     mPlayer.currentPlaybackTime = playbackTime;
}

这很好,音乐向前发展。释放拇指后,我重新启动NSTimer以发送时间更新以保持UISlider同步。问题是,在释放拇指时,前几个回调包含前一个时间值。这会导致拇指在返回新值之前跳回其原始位置。很难看。

任何人都有过这种行为的经验和纠正方法吗?如果你愿意,我可以提供一个样本项目来证明这种异常。

2 个答案:

答案 0 :(得分:1)

也许是因为当你开始寻找时,缓冲区中已经有解码数据。你向前寻找一分钟,但缓冲区中有几毫秒的音频,当这些桶播放时,播放器将其在文件中的位置报告为当前。只有从更新的位置开始新的桶并且标记开始表现。 (只是一个理论。)

难道你不能简单地手动过滤中间数据吗?你知道你使用滑块跳了多少,所以也许你可以将新位置存储到变量中并忽略来自玩家的更新,直到它们舒适地靠近新的滑块位置。 (希望这很有意义。)

答案 1 :(得分:0)

我遇到了同样的问题。我只是在延迟NSTimer(用于更新滑块)的创建过程中添加另一个NSTimer(设置为1.5秒)。当不再按下滑块时,就会发生这种情况。