【问题标题】:Does SDWebImage support "not-when-fast-scrolling" (skimming) for lazy loading?SDWebImage 是否支持延迟加载的“非快速滚动”(略读)?
【发布时间】:2014-08-17 09:15:07
【问题描述】:

在做延迟加载时(UICollectionView的表),

为了获得正确的结果,当用户在集合上快速滚动时,您不应该开始下载。

所以,想象一个有 200 个面板的垂直卷轴,每个面板都有一张图片;一次可以在屏幕上看到四五个。

首次加载时,应开始加载前 4 个可见图像。如果您向下滚动一点,新可见的图像应该会开始加载。

但是如果用户:非常快速地向下滚动到(比如说)位置 100,然后定位显示项目 100-104 的视图......理想情况下,您不应该开始加载用户“略过”非常快速的图像(比如说, 4 到 99),您应该只在用户快速停止滚动并且显然在某些图像上停止或放慢速度时才开始下载。

因此,这是您在任何高质量延迟加载滚动中都必须执行的标准操作。当用户浏览时,您不会开始加载。

我的问题很简单:SDWebImage 是否支持这个概念?如果没有,是否还有另一种流行的现成方法?干杯

【问题讨论】:

    标签: ios uitableview uicollectionview lazy-loading sdwebimage


    【解决方案1】:

    它不支持它,因为它通常是图像视图上的一个类别,但你自己添加这个能力会很简单。

    假设您在cellForItem... 中启动图像加载,您将在块之后添加一个调度,它只会在同一个单元格在例如 0.2 秒后仍然具有相同的索引路径时才会启动加载。

    我会在做任何事情之前检查您是否有可衡量的问题 - AFAIK SDWebImage(肯定是 AFNetworking 图像视图类别)将在收到新的 URL 请求时取消任何未完成的 URL 请求,因此您可能会做出不必要的优化。

    【讨论】:

    • 嗨 JR 感谢您确认它不是 SD 内置的!欢呼
    • 嘿 JR - 你知道,这是一个关于“等待”的好主意;我们总是通过检查您是否仍在快速滚动来完成“其他方式”。你的想法更像是亲吻,太棒了。仅供参考,我发现大约 0.4 是理想的(取决于所涉及的布局/图像大小/我猜的其他因素)。再次感谢!
    • 我实际上写了原始答案,说要在停止时检查滚动/重新加载,然后我想到了等待的事情。看起来确实简单多了!
    • 我可以确认它非常简单,并且在实践中效果更好。确实,从理论上讲,您“毫无意义地”等待 0.4 秒以等待出现的第一个单元格加载——但是,那又如何呢?我们总是以另一种方式来做,检查单元格是否显示,滚动速度等——现在我只是觉得很愚蠢:/再次感谢
    • @Joe Blow:你能给出一些示例代码吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多