我添加了几个CALayers作为UIView层的子层。每一层的内容都是从服务器下载的不同图像。每一层都是从屏幕外到随机生成的位置的动画。图像数据是异步下载的。每张图像的大小约为300x300或更小。
随机放置的结果是,层重叠,一些层被它们上面的层遮挡。这一切都很好。
我正在删除图层,因为它们从视图中完全模糊,使用the answer to this question中的建议确定覆盖率的计算发生在单独的线程上。
我有一个UIPanGestureRecognizer,允许用户在屏幕上拖动层。
当添加的层数接近25-30并变得越来越糟糕时,我遇到了一个性能问题。动画会变得断断续续,并且通常完全不存在(新添加的层只是出现在它们的最终位置)。并且平移手势或者被忽略或者导致所选层的断断续续的重新定位。
我假设我杀死了GPU,所有的层都重叠在一起,另一个层在上面做动画?
对如何提高性能有什么建议吗?
处理大量层的最佳实践?
让层在单独的view.layer中开始设置动画比之前添加的层更好吗?
谢谢!
发布于 2011-02-01 22:10:30
有几件事需要快速检查。
运行核心动画工具并查找不透明度。仅仅将图层的不透明标志设置为YES是不够的,如果底层图像有alpha分量,图层将会考虑到这一点。
如果您从服务器获取的数据是alpha,那么您应该使用Quartz重新绘制,并以不包含alpha的新格式将文件保存到本地。
请加倍确保您没有将一百万像素的图像放入100x100平铺中。也核心动画仪器,打开‘颜色错位图像’,并寻找黄色。
30到50层应该没有问题。
发布于 2011-02-01 09:45:50
如果所有的层都放不下GPU的内存或内存的一部分,事情就会慢很多。据报道,与在GPU内存中合成层相比,加载和卸载GPU内存相当慢。您必须尝试这个内存限制,因为较旧设备的可用GPU内存比较新的设备要少。
https://stackoverflow.com/questions/4847671
复制相似问题