UICollectionview使用CALayer和CATextlayer滚动不佳

时间:2013-09-17 16:19:13

标签: iphone ios cocoa-touch core-animation

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

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

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

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

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

你有其他方法吗?

顺便说一句 我过去常常使用UIKIt,但我进入了Core Animation,因为我觉得它会更快。

TNX。

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

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

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

EGOImageLoading

如果你找不到EGOCache文件,请从以下链接下载

EGOCache

此致

萨蒂亚