gpt4 book ai didi

iphone - CALayer shouldRasterize 传播到所有子层吗?

转载 作者:技术小花猫 更新时间:2023-10-29 10:17:07 27 4
gpt4 key购买 nike

如果我在 CALayer 上设置 shouldRasterize = YES,如果我希望整个层次结构被展平以获得更好的动画性能,我是否也必须在每个子层上设置它?

我问是因为当我在我的根层上设置 shouldRasterize = YES 并在 Instruments 中启用“颜色混合层”时,所有子层仍然存在并标记为混合。它没有压扁任何东西。

最佳答案

设置 shouldRasterize 并不像您想象的那样。为了合成父 View 的外观,光栅化与否,它必须检查 subview 以查看它们是不透明 还是透明的。当子对象不透明时,它们不需要混合。当它们是透明的时, View 需要与它们后面(或层次结构中更高)的任何内容混合。

因此,shouldRasterize 不会影响您使用 Instruments 看到的绿色/红色。为了让所有东西都变成绿色,您需要不使用透明度,并且让您的所有子对象都不透明。根据您的设计,有时不可避免地仍然有红色区域。该工具可帮助您优化可能不透明的对象,并减少 GPU 必须执行的混合量。

编辑:为了进一步解释,假设您有一个 UILabel 并且它位于一张照片之上。您只想查看文本而不是其背景颜色,因此将其 backgroundColor 设置为清除,并将 opaque 属性设置为 NO。在仪器中,这现在将显示为红色。 GPU 必须将这种透明度混合到其背后的图像上,执行两次绘制操作而不是一次。

如果我们将 opaque 设置为 YES 并给它一个纯色背景, View 现在将在仪器中显示为绿色,因为它不必混合与任何其他 View 一起查看。

因此,无论图层是否被栅格化,它仍然必须合成其 subview ,因此 shouldRasterize 实际上对您在 Instruments 中看到的任何一种方式都没有影响。

关于iphone - CALayer shouldRasterize 传播到所有子层吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12338553/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com