CALayer优化?

我添加了几个CALayers作为UIView层的子图层。 每层的内容是从服务器下载的不同图像。 每个图层都从屏幕外移动到随机生成的位置。 图像数据是asynchronous下载的。 每个图像大约300×300或更小。

随机放置的结果是,这些层重叠,有些被上面的层遮挡。 这很好。

我正在删除层,因为他们变得完全从视图中使用这个问题的答案中的build议隐藏确定覆盖率的计算发生在一个单独的线程。

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

当添加的图层数量接近25-30并逐渐变差时,我遇到了性能问题。 animation变得波涛汹涌,常常完全不存在(新添加的图层只出现在最终位置)。 平移手势要么被忽略,要么导致选定图层的重新定位不连续。

我假设我正在杀死所有图层重叠的graphics处理器和另一个图层上面的animation?

有关如何提高性能的任何build议?

处理大量图层的最佳实践?

图层是否比以前添加的图层在单独的view.layer中开始animation更好?

谢谢!

几个快速的事情来检查。

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

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

确保不要将100万像素的图片放入100×100的图块中。 此外,核心animation工具,打开“颜色错位图像”,并寻找黄色。

30至50层应该没有问题。

如果所有的图层都不适合GPU的内存或者内存的一部分,事情会变的很慢。 据报道,与GPU内存中的合成层相比,加载和卸载GPU内存相当慢。 您将不得不尝试这种内存限制,因为较旧的设备具有较less的GPU内存可用比较新的设备。