滚动 UITableView 期间未调用 audioPlayerDidFinishPlaying

Posted

技术标签:

【中文标题】滚动 UITableView 期间未调用 audioPlayerDidFinishPlaying【英文标题】:audioPlayerDidFinishPlaying not being called during scrolling UITableView 【发布时间】:2010-06-13 20:21:33 【问题描述】:

我的一个观点是UITableView,它充当AVAudioPlayer 的代表,当您选择某一行时,该表基本上会播放声音,并在播放完成后选择重复声音。

但是,我注意到,如果我为某个声音选择一个重复 ON 的单元格,然后滚动 UITableView 以选择不同的声音,它不会调用 audioPlayerDidFinishPlaying(因此不会重复)直到滚动之后已经停止。一旦我停止滚动,它就会重复。或者,如果我根本不滚动,它会重复就好了。

在滚动过程中UITableView 不再充当代表并调用audioPlayerDidFinishPlaying 时会发生什么?有什么想法吗?

【问题讨论】:

【参考方案1】:

即使文档没有明确说明,我怀疑 audioPlayerDidFinishPlaying 调用在主线程上被延迟(我的粗体句子):

AVAudioPlayer 类可让您播放 任何可用音频格式的声音 iPhone 操作系统。您使用委托来 处理中断(例如 来电)并更新 有声音时的用户界面 播放完毕。委托方法 对于 AVAudioPlayer 类是 在 AVAudioPlayerDelegate 中描述 协议参考。

只要有一些事件需要处理,比如滚动事件,调用就会在主线程上等待。

【讨论】:

以上是关于滚动 UITableView 期间未调用 audioPlayerDidFinishPlaying的主要内容,如果未能解决你的问题,请参考以下文章

快速滚动期间uitableview上的删除按钮

在 XCUI TestCase 期间最后停止在 UITableView 上滚动

滚动 UITableView 期间计时器将重置并停止运行

UITableViewController scrollViewDidScroll:在删除单元格期间未调用

滚动时未调用 sizeForItemAt

滚动 UITableView 时单选按钮未选中