为什么设置我的CALayer的不透明度似乎也会影响子层的不透明度?

时间:2012-07-11 14:44:03

标签: ios core-animation core-graphics

我没有明确设置我的子图层的不透明度 - 仅通过opacity属性设置超级图层。虽然超级层的不透明度确实如预期的那样发生变化,但我的子层的不透明度似乎也会发生变化,从而导致在超级层中的子层下面的元素被暴露。为什么会发生这种情况?

1 个答案:

答案 0 :(得分:5)

为什么这让你感到惊讶?你期望发生什么?如果您不想这样做,请不要将这些子图层放在该超级图层中。只需将它们置于其上(可能在一个单独的超级层中)。


编辑:我现在理解你的问题。您正在进行核心动画优化。核心动画试图通过在合成之前将不透明度应用于所有子图层来节省时间。这样它只能复合一次(这让它忽略容器超级层)。大多数情况下,这可以解决并提高性能。

你想要它做的是超级图层中的所有合成,然后应用不透明度,然后将结果与其他所有内容重新合成。这称为光栅化;这基本上意味着“在你把我与其他任何东西合成之前,请把我变成​​一个位图。”您可以在超级图层上设置shouldRasterize来申请。