如何在 UITableView 中实现类似 UIImageView 的延迟加载

Posted

技术标签:

【中文标题】如何在 UITableView 中实现类似 UIImageView 的延迟加载【英文标题】:How to implement UIImageView-like delayed loading in UITableView 【发布时间】:2009-11-03 12:20:00 【问题描述】:

背景: 我有一个 UITableView 在每个单元格中显示一个图像。这些图像都是大 pdf 文件的一部分。所以我正在做的实际上是在那些 UITableViewCells 中渲染小的 pdf 部分,每个单元格只显示一个片段。因此,我将 UIView 添加到单元格的内容视图并按需呈现视图。 渲染这些 pdf 部分很昂贵,每个大约需要 0.2 秒(仅绘制 Pdf 部分),这会减慢表格的滚动速度。

想法: 现在,当我查看 UIImage 如何呈现基于 URL 的图像时,我知道可能会有一个解决方案。如果您基于 url 创建 UIImage,这些图像会以某种方式延迟呈现。例如,看看 iTunes-App。 平滑滚动是可能的,每个图像都显示为未渲染,渲染完成后它看起来很平滑。

问题:如何通过以某种方式延迟显示单元格来呈现如上所述的 UITableViewCell 中的昂贵渲染?有谁知道,Apple 如何在 UIImageView 中解决它?

提前致谢

丹尼尔

【问题讨论】:

【参考方案1】:

这(大部分)是 Lazy load images in UITableViewCell 的副本。检查那里的链接和示例。

简而言之,您需要生成一个单独的线程 来加载 PDF 缩略图,然后该线程将生成的图像发送回主线程。这可以通过使用performSelectorInBackground:withObject:performSelectorOnMainThread:withObject:waitUntilDone: 方法轻松完成。

【讨论】:

您好,感谢您提供重复消息的提示。我没看到。解决方案虽然不满足我。如果您认为内存消耗很大,我必须提前建立多少缓存。我的图像和整个屏幕一样大。我刚刚找到了一个看起来很有希望的解决方案:我使用了 CATiledLayer!如果您在图层中委托绘图,则所有后台线程都由系统完成。您需要做的就是将绘图从视图移动到图层。 你能举个例子吗?

以上是关于如何在 UITableView 中实现类似 UIImageView 的延迟加载的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITableView 的索引列表中实现放大镜? [关闭]

如何在 UITableView 中实现搜索功能?

如何在 UITableview 的 didSelectRowAtIndexPath 中实现动作?

如何在 UITableView 中实现 dequeueReusableCell(withIdentifier:) 的代码?

如何在 UITableView 的 RXswift 和 RXCocoa 中实现 tableview 单元格的内部?

使用 scrollViewDidScroll 方法在 UITableView 中实现分页?