CALayer优化?

Tom*_*omH 7 calayer ios

我正在添加几个CALayers作为UIView层的子层.每层的内容是从服务器下载的不同图像.每个图层从屏幕外动画到随机生成的位置.图像数据是异步下载的.每张图片约为300x300或更小.

作为随机放置的结果,层重叠并且一些层被它们上面的层遮挡.这一切都很好.

我正在使用这个问题的答案中的建议来删除图层,因为它们变得完全被遮挡. 确定覆盖率的计算发生在单独的线程上.

我有一个UIPanGestureRecognizer,允许用户在屏幕上拖动图层.

当添加的层数接近25-30并且逐渐变差时,我遇到了性能问题.动画变得不连贯并且通常完全不存在(新添加的层只是出现在它们的最终位置).并且平移手势被忽略或导致所选层的不稳定重新定位.

我假设我正在杀死GPU,所有层重叠,另一层动画在上面?

有关如何提高绩效的任何建议?

处理大量图层的最佳做法?

是否更好的是让图层在单独的view.layer中开始动画,而不是之前添加的图层?

谢谢!

Bil*_*ney 5

有几件需要快速检查的事情。

运行核心动画工具并寻找不透明度。仅将图层的不透明标志设置为 YES 是不够的,如果底层图像具有 alpha 分量,图层将考虑这一点。

如果您从服务器获取的数据具有 alpha,那么您应该使用 Quartz 重新绘制,并以不包含 alpha 的新格式在本地保存文件。

请务必确保您没有将 1 兆像素的图像放入 100x100 的图块中。还有核心动画工具,打开“颜色未对齐的图像”并寻找黄色。

30到50层应该没问题。

  • 向 Apple 提交的错误 - 错误 ID# 8942912。 (2认同)