在UIScrollview中管理大量昂贵的UIView

时间:2010-08-10 07:47:02

标签: iphone cocoa-touch uikit uiscrollview

我正在设计的iPad应用程序将显示全屏UIScrollView,允许用户浏览大量(200或更多)图像 - 大小相同,无分页。图像将从Web加载,并且没有预定义的顺序。现在我做的是

  1. 我加载并解析一个XML feed,其中包含对我加载的图像的引用,以及我在另一面显示的元数据。我将所有这些存储在管理前视图和后视图以及在这些视图之间翻转的单独对象中。
  2. 创建的对象视图放在网格中的UIScrollView上,首先显示占位符图像。
  3. 只要在对象中设置了图像URL,它就会使用“NSURLConnection”获取图像本身。图像完全加载后,它将替换占位符图像。

这适用于有限数量的对象(即使UI有时没有响应),但它不会扩展。当我加载超过60-70个自定义视图控制器时,应用程序崩溃。其中大多数都是屏幕外的 - 图像每个280x280,因此在任何给定时间只能看到12个。

我想我需要找到一种方法来继续在后台加载数据,但要管理只保留那些实际在UIScrollView可见范围内(或附近)的视图。我是否需要使用Core Data来管理它?如果你处理了类似的挑战,我很想听听你是如何解决这个问题的 - 我猜这是一个很常见的挑战。

2 个答案:

答案 0 :(得分:2)

您不加载60-70个视图控制器。您只有屏幕上的视图控制器数量,当视图向下滚动(比如说)时,您将控制器置于顶部,更改已存储的图形并将其放在底部。

您正在加载的其他人可以在后台下载。您不需要核心数据(尽管您可以使用它)。

在滚动视图上查看苹果视频,它们涵盖了这一点。

答案 1 :(得分:0)

这就是我这样做的方式。 我当时只显示了3个UIView,每次用户前进时我都会卸载第一个UIView并加载一个新的UIView。用户没有注意到这一点,因为下一个屏幕和上一个屏幕总是被加载( 3 UIViews)