4

我有一个 UISlider 作为洗涤器。随着拇指被拖动,我执行以下操作:

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

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

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

4

2 回答 2

1

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

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

于 2010-03-04T12:47:32.350 回答
0

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

于 2019-11-23T12:24:40.433 回答