【发布时间】:2013-09-17 16:19:12
【问题描述】:
我有一个集合视图,可以说大约 50 个对象,每个对象都有基于其类别的三个图像之一(没关系),每个对象(变成一个单元格)也有两个 CATextLayer 对象和一个徽标(每个单元格有一个独特的标志)。
我创建了一个包含所有上述参数的可重用单元格 - 类别图像分配给单元格 contentView.layer,徽标是一个 calayer(我在第一次创建单元格时创建它,然后只需更改它的值- 而不是每次调用 cellforitematindexpath 时都添加一个 calayer)并通过相同的技术更改不同单元格的 cattextlayer(基于数据源对象信息)。
一切正常,但在 iPhone 4 上滚动非常慢,我想那是因为对于每个被调用的单元格,我都去获取徽标(位于目录中)。当视图加载时,基于类别的图像被实例化为一个层(所以我不需要在调用单元格时获取它们) - 这更快但是我可以用徽标做什么?我无法初始化 50 张图像并让它们吃掉我所有的记忆。
我有一个可以导致快速平滑滚动的解决方案 - 初始化用户在集合视图中看到的第一个对象,并仅在没有拖动或减速时加载单元格参数 - 而不是使用 uicollectionview.visiblecells 到哪个单元格我需要加载。
但我不希望这样 - 我希望用户滚动并查看所有单元格参数 而不是一个activityIndicator。
你有其他方法吗?
顺便说一句 我曾经使用 UIKIt 来完成所有这些工作,但我转而使用 Core Animation,因为我觉得它会更快。
tnx.
【问题讨论】:
-
使用仪器。其他一切都是猜测。核心动画工具可能有助于查看它是否与渲染相关。否则,时间探查器擅长识别瓶颈。
-
与 CALayers 相比,UIKit 有一些额外的成本,但并不大。通常,UIKit 围绕标准情况进行了优化,这可以提供比操作自己的图层更好的性能。正如@DavidRönnqvist 所说,分析是您的最佳选择。
标签: iphone ios cocoa-touch core-animation