【问题标题】:Remove 'hidden' images from UIScrollView从 UIScrollView 中删除“隐藏”图像
【发布时间】:2013-04-23 10:23:21
【问题描述】:

我有一个显示由 url 设置的图像的滚动视图。现在我只希望将可见图像和上一个和下一个图像预加载到滚动视图上以减少内存使用。我该如何做到这一点?

【问题讨论】:

  • 你试过什么? +也许你可以使用 UICollectionView 而不是“原始”滚动视图,这样可以开箱即用地获得重用功能

标签: objective-c xcode memory-management uiscrollview uiimageview


【解决方案1】:

如果您使用 UITableView 而不是 UIScrollView,您可以创建自己的 UITableViewCell 类型,在其内容中加载 1 张图片。

优点是只有可见的UITableViewCells(当前显示在设备屏幕上的)被加载到系统内存中,所以不会占用太多资源。

Here 是您可以在 Internet 上找到的众多 CustomCell 教程之一。

【讨论】:

    【解决方案2】:

    当我做同样的事情时,我创建了一个大小为 3 倍的 UIScrollView。大到足以容纳 3 张图像,即当前显示的一张以及左右两侧的下一个兄弟姐妹。

    如果之前未加载这些图像,则它们会被预先加载。所以用户有一些平滑和响应的外观和感觉。

    当用户滚动到下一个时,他只能滚动一个,然后我重新排列视图。假设图像 1、2 和 3 在滚动视图中,并且 2 是可见的,因此(预)加载了 1、2 和 3。用户向右滚动。图像 3 将可见。一旦它变得完全可见,我将滚动视图的可见矩形再次设置到中间。现在图像 2 是最左边的,图像 3 是可见的,图像 4 放置在最右边并预加载。

    当到达图像列表的末尾时,即显示第一个或最后一个时,我分别在最左边或最右边放置一个虚拟视图,这是一个简单的文本视图,显示“没有更多图像”。

    很遗憾,我无法共享该代码。

    【讨论】:

    • 是的,我已经得到了类似的东西,我的问题是删除不可见的图像。太糟糕了,你不能分享一些代码,因为这真的会帮助我
    • 不,代码并没有真正的帮助,因为它被“嵌入”到一些相当困难的业务逻辑中,并且我在那里犯了一些概念上的错误,因为那是我的第一个真正的应用程序。删除图像有什么问题?我使用了某种应用程序内部内存缓存,将它们保存在字典中,当内存警告出现时,我删除了该字典中最旧的一半。与此同时,我了解到更好的缓存解决方案。但是您删除它们的具体问题是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2011-07-04
    相关资源
    最近更新 更多