【发布时间】:2015-01-08 22:14:14
【问题描述】:
这与以下问题有关:How to improve performance of CALayer animations?
我目前有一个可以有数百个 CALayers 的视图。我知道拥有许多 CALayer 会导致处理器限制的性能下降,但我想看看是否有人尝试过以下几种方法并可以提供指导。
为了更好地让您了解我正在尝试做什么,假设我在图层上绘制了一个点。当我放大时,我希望这个点变成一颗星星。当我缩小时,我希望星星回到一个点。现在想象一下,我有数百个这样的点。
重绘单层 vs 多个预绘层
我一直在尝试预先绘制 2 个单独的图层,而不是在缩放更改时重绘 1 个单独的图层,当缩放更改时,我只是隐藏一个并显示另一个。
p>[layer configureWithZoom:zoom];
[layer setNeedsDisplay];
对
layer1.hidden = (zoom == DEFAULT_ZOOM);
layer2.hidden = (zoom != DEFAULT_ZOOM);
我知道拥有一堆层会增加我的内存占用,如果我之前有 50 层,我现在有 100 层。但就性能而言,这会有所帮助吗?
隐藏与删除
鉴于上述情况,我现在有一些并非任何时候都需要的图层。隐藏这些层还是删除它们更好?
当我希望它消失时设置layer.hidden = YES vs [layer removeFromSuperlayer]。
设置layer.hidden = NO vs [superlayer addSublayer:layer] 当我希望它回来时。
如果我隐藏了一个层,但为超级层设置了动画,在动画期间是否会因为子层被隐藏而不是被移除而影响性能?与添加/删除子层相比,这种性能损失如何?
父层与直接分层
现在拥有单独层的问题之一是我需要代码来将它们作为一个单元进行管理。以前更改图层位置就像layer.position = newCoordinates; 一样简单。现在我需要做:
layer1.position = newCoordinates1;
layer2.position = newCoordinates2;
我决定简化它并创建一个父层并将 layer1 和 layer2 添加到它。我的主层现在可以只操作父层而不是单个层。我的父层还将处理显示或隐藏 2 层中的哪一层的逻辑。
但是,这现在引入了第 3 层(一开始我们有 1 层,现在我们有 3 层)。我很好奇除了子图层之外没有实际绘图的图层是否会对性能产生任何影响。与将这 2 个子层直接添加到超层相比,具有 2 个子层的空层基本上会影响性能。
任何指导将不胜感激。
【问题讨论】:
标签: ios performance calayer