【问题标题】:Efficiency of CALayer and how many is the limitCALayer的效率和极限是多少
【发布时间】:2012-06-04 20:09:41
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: iphone ios calayer gpu processing-efficiency


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答,@Semix。鉴于 UIView 由 CALayers 支持,我很惊讶 CALayer 的性能比 UIView 更差。设置 CALayer 的图像然后为其位置设置动画是否正确?你是使用原生的 CALayer 动画,还是在每一帧设置它的位置?
    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 2020-08-21
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    相关资源
    最近更新 更多