在 UIScrollView 中延迟加载不同尺寸的图像而不分页

Posted

技术标签:

【中文标题】在 UIScrollView 中延迟加载不同尺寸的图像而不分页【英文标题】:Lazy load images of different dimensions in UIScrollView without paging 【发布时间】:2013-07-14 13:32:19 【问题描述】:

我有一个水平滚动的 UIScrollView,它应该显示彼此相邻的不同尺寸的图像。所有图像都必须调整为滚动视图的高度,这给我们留下了可变宽度。这里的问题是没有分页,但是图像仍然需要延迟加载。更糟糕的是,在显示视图时,我只有图像的 URL,所以我不知道图像的宽度/高度。

我的想法是在每个 URL 的滚动视图中都有一个固定大小的容器视图。然后让容器视图加载图像并通过委托告诉滚动视图图像的大小。然后滚动视图可以更改容器视图的大小并相应地重新布局其他视图。 (但不是这样你就不能在 滚动时执行此操作吗?)

我不确定这是否是要走的路,很想听听对此的一些想法。另外,我将如何实际确定何时加载图像?滚动视图的内容大小和偏移量会不断变化。我也没有看到任何这样做的示例代码或开源项目,如果我错过了,请告诉我。

【问题讨论】:

这似乎是集合视图的完美用例。为什么不使用其中之一? 【参考方案1】:

最简单的方法是在开始时加载一个小的 JSON 文件(或其他格式),其中只有图像的大小。这样你就可以提前知道所有的尺寸了。

这在服务器端使用 GD 或 Imagick(至少使用 php)非常有用,只是不要忘记将结果缓存在服务器上以获得更好的性能。

【讨论】:

【参考方案2】:

我认为,对于 UIScrollView 来说,内容大小的变化不是问题。您只需确保占据大部分屏幕空间的当前占位符保持在同一位置。更改滚动视图的内容偏移量以使他保持在相同的位置。如果屏幕上完全有 1 个占位符,如果用户向左拖动,我将使用左侧的占位符,如果用户向右拖动,则使用右侧的占位符。

如果我理解错了请告诉我。

【讨论】:

以上是关于在 UIScrollView 中延迟加载不同尺寸的图像而不分页的主要内容,如果未能解决你的问题,请参考以下文章

在 UIscrollview 上延迟加载照片

使用 SQLite 中的数据在 UIScrollView 中延迟加载

如何在启用分页的 UIScrollView 中延迟加载 100 多个页面?

延迟加载 UIScrollView 页面时如何摆脱障碍

如何使在Swift中使用UIScrollView进行滚动和缩放

使用drawRect延迟加载UIView:绘图