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

Dan*_*maa 4 core-animation core-graphics ios

我没有明确地设置我的子图层的不透明度 - 只有超级图层通过opacity属性.虽然超级层的不透明度确实发生了预期的变化,但是我的子层的不透明度似乎也会发生变化,从而导致超级内的子层下方的元素被暴露.为什么会发生这种情况?

Rob*_*ier 5

为什么这让你感到惊讶?你期望发生什么?如果您不想这样做,请不要将这些子图层放在该超级图层中.把它们放在它上面(也许是在一个单独的超级层).


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

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