我正在添加几个CALayers作为UIView层的子层.每层的内容是从服务器下载的不同图像.每个图层从屏幕外动画到随机生成的位置.图像数据是异步下载的.每幅图像约为300×300或更小.
作为随机放置的结果,层重叠,一些层被它们上面的层遮挡.这一切都很好.
我正在使用the answer to this question中的建议删除图层,因为它们变得完全被遮挡.确定覆盖率的计算发生在单独的线程上.
我有一个UIPanGestureRecognizer,允许用户在屏幕上拖动图层.
当添加的层数接近25-30并且逐渐变差时,我遇到了性能问题.动画变得不稳定并且通常完全不存在(新添加的层只是出现在它们的最终位置).并且平移手势被忽略或导致所选层的不稳定重新定位.
我假设我正在杀死GPU,所有的层重叠,另一层动画在上面?
有关如何提高性能的任何建议?
处理大量图层的最佳做法?
让图层在单独的view.layer中开始动画比以前添加的图层更好吗?
谢谢!
解决方法
几行快速检查.
运行Core Animation Instrument并查找不透明度.仅将图层的不透明标志设置为YES是不够的,如果底层图像具有alpha组件,则图层将考虑该值.
如果您从服务器获取的数据具有alpha,那么您应该使用Quartz重绘并以不包含alpha的新格式在本地保存文件.
确保您没有将100万像素图像放入100×100磁贴中.同样是Core Animation Instrument,打开’Color Misaligned Images’并寻找黄色.
30到50层应该没问题.