2

在我的 iPhone 应用程序中,我需要显示大量(最多 150 个)10x10 像素的小点,它们分别在屏幕上移动。它们不需要以任何方式顺利移动,但需要每秒钟左右更新一次。目前,我已将其实现为一个每秒重绘的 CALayer。

但我知道 CALayers 非常高效,因为它们映射到 GPU 硬件。所以我想知道为每个点创建一个单独的 CALayer 并通过设置它们的位置属性来移动它是否会更有效(就电池使用而言)。

所以我想知道你是否有这方面的经验。CPU 可以做的更少,但 GPU 更多。GPU硬件仍然可以处理多少个CALayer?

如果我让它们分开 CALayers,我也可以轻松地为它们设置动画,这样看起来会更好。那会更耗能吗?

在我的情况下更糟糕的是,我目前为它们使用 CATiledLayer,最多暴露 4 个图块。这也意味着我每次更新都需要重绘它们 4 次。

4

1 回答 1

2

那里。我遇到了和你一样的问题。就我而言,我在条形图中绘制了 80 个左右的条形立管。以前,我们为每个立管使用一个 UIView(实现了它的 drawRect),后来我决定为每个立管使用 CALayer(不实现它的 drawLayerInContext)来制作动画。条数为 80,我发现 1. UIView 方法消耗更多内存(因为它在 drawRect 中请求 cgcontext)。2. UIView 方法具有更好的动画响应能力。在我的例子中,UIE FPS 大约是 60,但 CALayer 大约是 34。

后来,我尝试了一个bar数少的案例(40、30等),GPU压力更小,可以从CALayer动画中得到满意的FPS数。

我想在这里提到的是,当您切换到“每点一层”时,您需要检查动画是否像以前一样流畅。

于 2012-07-05T02:33:25.010 回答