0

我有一个集合视图,可以说大约 50 个对象,每个对象都有基于其类别的三个图像之一(没关系),每个对象(变成一个单元格)也有两个 CATextLayer 对象和一个徽标(每个单元格都有一个独特的标志)。

我创建了一个包含所有上述参数的可重用单元格 - 类别图像分配给单元格 contentView.layer,徽标是一个 calayer(我在第一次创建单元格时创建它然后只是更改它的值 - 而不是每次调用 cellforitematindexpath 时添加一个 calayer)并通过相同的技术更改因单元格而异的 cattextlayer(基于数据源对象信息)。

一切正常,但在 iPhone 4 上滚动非常慢,我想那是因为对于每个被调用的单元格,我都会去获取徽标(位于目录中)。当视图加载时,基于类别的图像被实例化为一个层(所以我不需要在调用单元格时获取它们) - 那更快但是我可以用徽标做什么?我无法初始化 50 张图像并让它们吃掉我所有的记忆。

我有一个可以导致快速平滑滚动的解决方案 - 初始化用户在集合视图中看到的第一个对象,并仅在没有拖动或减速时加载单元格参数 - 而不是使用 uicollectionview.visiblecells 我需要的单元格加载。

但我不希望这样 - 我希望用户滚动并查看所有单元格参数而不是 activityIndi​​cator。

你有其他方法吗?

顺便说一句,我曾经使用 UIKIt 来完成所有这些工作,但我转而使用 Core Animation,因为我觉得它会更快。

tnx。

4

2 回答 2

4

请参阅 WWDC 2012 视频iOS App Performance: ResponsivenessiOS App Performance: Graphics and Animations了解如何使用 Instruments 来识别问题的一些教程。

如果您还没有这样做,我将转向使图像检索过程异步。此外,如果您的图像很大/即正在调整大小,您可能希望保存/使用调整大小/缩略图再现,这可以提高性能。那个以前的视频甚至谈到了在忙于UICollectionView图像快照的情况下替换一组复杂标签的想法。

但是,正如大卫所说,在您通过时间分析器运行它之前,我们只是在猜测。为了解释苹果在那些 WWDC 视频中使用的工作流程,你必须使用工具来量化/识别精确的问题,形成假设,在投入太多时间在解决方案之前快速测试该假设,如果假设经得起审查,只有这样才能深入实施解决方案。

于 2013-09-17T16:52:31.793 回答
0

有一个库可以在后台加载图像。它遵循延迟加载的概念。如果您使用它,您的应用程序将平滑滚动。

在以下库中有“EGOImageView”。使用此类代替 ImageView 并将图像路径设置为“ImageURL”属性

EGOImageLoading

如果您在其中找不到 EGOCache 文件,请从以下链接下载这些文件

自我缓存

问候,

萨提亚

于 2013-09-17T16:52:14.353 回答