【发布时间】:2020-08-29 04:25:18
【问题描述】:
我正在开发一个 tableView,其中每个单元格由 AVPlayer 组成,并且高度为 view.frame.size.height 并且还启用了分页。所以本质上它的工作方式类似于 tiktok 应用程序提要。我遇到的问题是我必须在 prepareForReuse 中销毁 AVPlayer 以在调用 cellForRow 时显示新视频,否则如果我不销毁它并且用户快速滚动,则较旧的视频会出现一秒钟,如果我销毁每个播放器使用之前的时间,然后 AVPlayer 需要一秒钟来加载和显示黑屏之间。它有效,但结果并不优雅。
那么有什么方法可以预加载单元格并将它们保存在数组中。就像一个由三个独立单元组成的数组。我们可以在用户滚动时更改其中的值
例如
[] represents cell on screen
0 [1] 2
array[1] would always be the cell on screen
array[0] previous
array[2] next
if user scroll down then
array[0] = array[1]
array[1] = array[2]
array[2] = create next one (proactively)
if user scroll up then
let array1 = array[1]
array[1] = array[0]
array[0] = array1
array[2] = create new one
【问题讨论】:
-
你看过prefetching
-
@RobertCrabtree 是的,但它有利于网络调用,而不是用于单元创建。
-
确实如此,但如果不查看当前代码,很难说出什么对您有帮助。
-
这听起来像你的问题,基本上,设置 AVPlayer 需要很长时间,可能(从它的声音)由于网络请求。在您的预取中执行此部分,以便在您的单元格要求它时准备好。另外,我会继续清理您在 prepareForReuse 中的单元格。
-
@DPMitu 已经这样做了,为了进一步解释,我正在播放已下载的手机存储中保存的视频。仍然 avplayer 需要一秒钟才能正确加载并准备好播放。
标签: ios swift uitableview preload prepareforreuse