我正在添加几个CALayers作为UIView层的子层.每层的内容是从服务器下载的不同图像.每个图层从屏幕外动画到随机生成的位置.图像数据是异步下载的.每张图片约为300x300或更小.
作为随机放置的结果,层重叠并且一些层被它们上面的层遮挡.这一切都很好.
我正在使用这个问题的答案中的建议来删除图层,因为它们变得完全被遮挡. 确定覆盖率的计算发生在单独的线程上.
我有一个UIPanGestureRecognizer,允许用户在屏幕上拖动图层.
当添加的层数接近25-30并且逐渐变差时,我遇到了性能问题.动画变得不连贯并且通常完全不存在(新添加的层只是出现在它们的最终位置).并且平移手势被忽略或导致所选层的不稳定重新定位.
我假设我正在杀死GPU,所有层重叠,另一层动画在上面?
有关如何提高绩效的任何建议?
处理大量图层的最佳做法?
是否更好的是让图层在单独的view.layer中开始动画,而不是之前添加的图层?
谢谢!
有几件需要快速检查的事情。
运行核心动画工具并寻找不透明度。仅将图层的不透明标志设置为 YES 是不够的,如果底层图像具有 alpha 分量,图层将考虑这一点。
如果您从服务器获取的数据具有 alpha,那么您应该使用 Quartz 重新绘制,并以不包含 alpha 的新格式在本地保存文件。
请务必确保您没有将 1 兆像素的图像放入 100x100 的图块中。还有核心动画工具,打开“颜色未对齐的图像”并寻找黄色。
30到50层应该没问题。