【问题标题】:How to store CALayers for reuse?如何存储 CALayers 以供重复使用?
【发布时间】:2023-04-03 20:57:01
【问题描述】:

我有一堆相同的 CALayers 想要重复使用。通常,它们中的一些应该消失,然后在同一个超层内的另一个位置重用(半秒左右之后)。

在它们从屏幕上消失时保留它们的最佳方式(性能方面)是什么? setHidden:YES,还是 setOpacity:0,还是 removeFromSuperLayer ?还是我没有想到的其他东西?

(大约有 12 个相同的圆形 CALayer,其内容来自 UIImage,大约 30 个 CAShapeLayer,每个 CAShapeLayer 仅包含一条线段——尽管通常方向不同——)

【问题讨论】:

  • 我最终使用了 setOpacity:0,这种方式的性能似乎要好得多。我没有确凿的证据,但如果您遇到性能问题,您可能想尝试一下。

标签: iphone graphics calayer reusability


【解决方案1】:

您应该使用 nsset 或 nsarray 来维护未使用的 calayers 队列。该过程类似于您在使用表格单元时所做的。

由于每个 calayer 都是 removeFromSuperLayer'd,所以将其放入您的集合中,并在需要时从集合中取出一个。

【讨论】:

  • 谢谢,但我已经在做类似的事情了。我真正想知道的是,您是否应该将该图层保留为屏幕上已经存在的某个图层的子图层(并且只是将其隐藏或使其完全透明)还是将其完全删除以使图形硬件能够“缓存”它更好。
  • 隐藏图层或使其透明可能会降低您的帧数。最好保持层堆栈光。所以我建议总是在不使用时 removefromsuperlayer。
【解决方案2】:

你提到的三个似乎都是可以尝试的合理的事情。你真的应该测试每一个,看看哪一个能给你的应用程序带来最好的性能,结果可能会让你大吃一惊。

【讨论】:

  • 我无法通过其中任何一个获得我想要的性能。当我学会更有效地使用这些仪器时,我会做一个更“科学”的测试。我已经使用 Core Animation 工具尝试过它们,但有趣的是我的 FPS 似乎与所有这些都不错 - 但我可以注意到我的一个动画正在跳过(相当多)帧。
  • 尝试使用采样仪器或使用 Shark。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
相关资源
最近更新 更多