layer的透明度alpha是影响到子layer的。也就是说如果父layer的透明度为0.5,那么子layer的透明度是原来自己的透明度的一半。
考虑下面这种情况。一个view上叠加一个label。view的背景色为白色,透明度为0.5。label的背景色为白色,alpha为0.5。
在view的边缘区域,最终的色值为alpha为0.5的白。在label区域,最终色值为alpha为0.5的白,加上alpha为0.5*0.5=0.25的白,总计为alpha为0.75的白色。效果就不太理想。
- 如何解决
理想情况下,我们希望先不考虑layer的alpha值,把子layer什么的合并成一个图片,然后对这张图片统一设置alpha值。
有两种方法可以达到这个效果- 设置Info.plist文件中的
UIViewGroupOpacity
为YES。在iOS7以后已经设置了,iOS6没有设置 - 设置组透明。
- 设置Info.plist文件中的
self.exampleView?.layer.shouldRasterize = true
self.exampleView?.layer.rasterizationScale = UIScreen.mainScreen().scale