UIScrollView:当用户滚动时,我如何回收可滚动网格中的对象?

时间:2009-05-05 16:54:17

标签: iphone performance uiscrollview

我有一个带有图像网格的UIScrollView。目前它们只有6个,但有一天可能会有几百个。当然,在UIScrollView中创建几百个UIImageView对象并用图像数据填充它们当然是个坏主意。我想我正在Apple文档的某处阅读:他们建议只创建如此需要填充可滚动可见区域的mutch elemends。

但是如果我立即重新定位UIImageView元素,我会担心性能问题。我认为。当用户开始向下滚动时(假设它从0,0开始),我必须重新定位那些从顶部可见区域出来的UIView对象,将它们快速定位到底部然后分配非常(!! )快速将新图像对象添加到行中的UIImageViews。我的意思是......如果用户开始像野生瞪羚一样滚动,会更快更快吗?

你的做法如何?

2 个答案:

答案 0 :(得分:1)

UIScrollView(或实际上是UIKit)非常擅长不重绘不改变的东西。如果您只是移动(或移除以回收)屏幕(或剪切)视图,您将不会重绘。在屏幕上添加子视图同样如此。

如果您没有启用分页,则可能需要实现UIView提供的一些更快的绘图代码。但是我会先测试一下 - iPhone的物理限制会限制滚动到某种程度。

答案 1 :(得分:1)

在类似但规模较小的情况下,我通过加载滚动视图维度所需的内容来处理这个问题,而不是整个数据集。我只是水平滚动,我发现在当前可见的一侧加载1或2张图像可以保持整洁美观。当只有1个可见时,它仍然会加载3或5个图像,但它比装载数十个图像要好得多。您需要进行一些实验,以了解在可见区域周围需要多少污泥。

动态加载/卸载图像最好在滚动视图的委托方法中处理。