Iphone 使用MPMusicPlayerController,将musicPlayer.currentPlaybackTime设置为seek,但需要秒才能生效

Iphone 使用MPMusicPlayerController,将musicPlayer.currentPlaybackTime设置为seek,但需要秒才能生效,iphone,seek,mpmusicplayercontroller,Iphone,Seek,Mpmusicplayercontroller,我有一个滑环作为洗涤器。拖动拇指时,我执行以下操作: - (void) _seekTo:(double)playbackTime { mPlayer.currentPlaybackTime = playbackTime; } 这很好,音乐寻求前进。释放thumb后,我重新启动NSTimer以发送时间更新以保持UISlider同步。问题是,释放拇指后,前几个回调包含上一个时间值。这会导致拇指在返回到新值之前跳回其原始位置。很难看 有没有人有过这种行为的经验和纠正方法?如果您愿意,我可以

我有一个滑环作为洗涤器。拖动拇指时,我执行以下操作:

- (void) _seekTo:(double)playbackTime {
     mPlayer.currentPlaybackTime = playbackTime;
}
这很好,音乐寻求前进。释放thumb后,我重新启动NSTimer以发送时间更新以保持UISlider同步。问题是,释放拇指后,前几个回调包含上一个时间值。这会导致拇指在返回到新值之前跳回其原始位置。很难看


有没有人有过这种行为的经验和纠正方法?如果您愿意,我可以提供一个示例项目来演示这种异常现象。

可能是因为当您开始搜索时,缓冲区中已经有解码数据。您向前搜索一分钟,但缓冲区中有几毫秒的音频,当这些存储桶播放时,播放机将其在文件中的位置报告为当前位置。只有到那时,新的桶才会从更新的位置出现,标记器才会开始工作。(只是一个理论。)


你不能简单地手工过滤中间数据吗?你知道你使用滑块跳了多少,所以也许你可以将新的位置存储到一个变量中,忽略玩家的更新,直到他们舒适地接近新的滑块位置。(希望有道理。)

我也有同样的问题。我只是用另一个
NSTimer
(设置为1.5秒)延迟
NSTimer
(用于更新滑块)的创建。当不再按下滑块时会发生这种情况。

感谢您的回复。这正是我所想的,但令人惊讶的是,播放器不会负责确保当您设置当前播放时间时,它会对缓存的音频进行任何必要的转储,并从设置的位置继续播放。你提出的过滤想法是我在写这篇文章之前考虑过的,但我想知道是否有人经历过,我是否遗漏了一些明显的东西。由于文档中没有提到这一点,我倾向于将其归类为bug或至少是糟糕的实现。干杯