检查设置的图像是不是与缓存中的图像相同

Posted

技术标签:

【中文标题】检查设置的图像是不是与缓存中的图像相同【英文标题】:Check if set image is the same as image in cache检查设置的图像是否与缓存中的图像相同 【发布时间】:2017-04-18 13:35:05 【问题描述】:

我正在寻找一种廉价的方法来了解我的 UITableViewCell 中设置的图像是否与我尝试从缓存中设置的图像相同。

由于我有可重复使用的单元格,我需要能够在重复使用单元格时更改图像。

问题是,第一个单元格的图像设置了两次,它会引起我想避免的眨眼。

我必须检查“imageView.image”和从缓存中检索到的图像是否相等,但它不起作用。

有什么线索吗?

【问题讨论】:

你想做什么? 防止我的图片相同时重新加载 你使用模型类了吗? 我用的是 realmswift 【参考方案1】:

您似乎正在尝试寻找解决闪烁问题的方法,或许可以尝试调试为什么会发生这种情况。

理想情况下,您应该使用prepareForReuse 并在每次重复使用单元格时清除图像。此外,如果图像被缓存,它应该只设置一次,并且立即设置(而不是像第一个实例那样在缓存中丢失并且您必须执行网络调用)。

如果真的要检查图片是否相同,可以对比图片的URL,URLString都是Equatable,可以用来唯一标识图片。

【讨论】:

这与设置 isSet 布尔值相同。无法检查已设置的图像的 url,因为我在主要属性上有一个 DidSet,我用它来正确设置所有内容。使用 prepareForReuse 和/或清除图像不起作用,我尝试的第一件事。发生这种情况是因为 ios 每次调用 viewWillAppear 时都会在 indexPath 调用 cellForRow,看不到我该如何调试 一个 isSet 布尔值似乎并不完全相同,布尔值只会告诉图像是否设置,而不是与哪个图像。如果URL 是您的viewModel 对象的一部分,您可以将其与之前用于设置单元格的viewModel 进行比较,从而避免使用相同的图像再次设置它。 另外,我刚刚尝试了一个示例主从项目,当弹出详细视图控制器时,主视图控制器调用了viewWillAppear,但这不会触发对cellForRowAt indexPath 的调用,所以你的代码中必须有其他东西触发它。 试图通过比较id来使用模型中的数据,id相同,数据没有重置但单元格被重新加载,这有点儿。似乎罪魁祸首在其他地方,我将不得不进一步调查。不过感谢您的宝贵时间

以上是关于检查设置的图像是不是与缓存中的图像相同的主要内容,如果未能解决你的问题,请参考以下文章

检查 UIImageView 中的图像不是占位符图像并附加到 UIImage 数组

使用与标签栏相同的视觉效果设置导航栏的样式

将值设置为缓存图像以崩溃结束

如何检查当前图像资源附加到android xml中的ImageView?

我在哪里为我的图像设置缓存信息?

如何为 React Native 中的所有组件设置相同的背景图像?