【问题标题】:Using MPMusicPlayerController, setting musicPlayer.currentPlaybackTime to seek but takes second to take effect使用MPMusicPlayerController,设置musicPlayer.currentPlaybackTime为seek但需要秒才能生效
【发布时间】:2010-03-04 12:21:56
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: iphone seek mpmusicplayercontroller


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。这就是我的想法,但令我惊讶的是,播放器不负责确保当您设置 currentPlayBack 时间时,它会做任何必要的缓存音频转储并从设置的位置继续。您提出的过滤想法是我在这篇文章之前考虑过的,但想知道是否有人经历过这种情况,以及我是否遗漏了一些明显的东西。由于文档中没有提到这一点,我倾向于将其归类为错误或至少是糟糕的实现。干杯!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-07-18
      • 2015-08-23
      • 2010-11-25
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      相关资源
      最近更新 更多