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内存可用比较新的设备。
- 捕获UIView的图像(renderInContext工作不正常)
- 在UITableViewCell的子视图上设置遮罩层将覆盖自动布局约束
- Swift 3:如何创buildUIImageView的边缘/边angular模糊?
- CAGradientLayer对angular线渐变
- animation之后,我的CALayer变换保持不变,但视angular消失
- 在iOS上,setNeedsDisplay真的不会导致drawRect被调用…除非CALayer的显示或drawInContext终于调用drawRect?
- <CATransformLayer:0x14fea3710> – 在仅变换图层中更改属性masksToBounds将不起作用
- CALayer – 暗影导致性能下降?
- UIView用虚线