说这个问题之前,我们先来说说什么是图层混合,图层混合为什么会影响性能?
首先弄懂这个问题,我们要先了解一下像素。
像素
屏幕上的每一个点就是一个像素,每个像素可有各自的颜色值,可采三原色显示,由R、G、B(有的还有alpha通道)构成。
像素的概念了解后,我们来说一下什么是图层混合?
图层混合
如果屏幕的一块区域上有多个图层(layer),每个图层都会有一定的透明度,那么最后这块区域的显示效果就是这些图层共同作用的结果,这种结果需要cpu对每个图层的颜色进行计算,需要消耗更多的cpu资源。如果我们把最上层的layer设定为不透明,那么cpu就不需要计算底层的layer的色值,这样就可以节约cpu的计算量,节约资源。
好了,进入正题:
我随意谢了个界面,打开Instruments,选择CoreAnmation,注意必须在真机上测试。
勾选color Blended Layers选项查看图层混合
看到的效果是这样:
发现label发生了图层混合,下面我们把label的背景颜色设置成白色(这个会经常忘记设置背景颜色)
再次测试,发现英文没有问题,但是中文确还是有图层混合的情况
这个问题是由于中文的话,会有个子layer,解决办法就是选中cliptobonds
再次测试
发现已经没有图层混合的情况了。但是这里需要注意,如果label有圆角的需求,也就是当你用了layer.cornerredius一定不能用cliptobounds,这样会形成离屏渲染,离屏渲染如果过多会严重影响性能(掉帧),这种情况下如果图层混合可以不用管,我用coreanmation测试发现微信也没有处理label中文显示图层混合的问题,想来这个对性能的影响也不会很大。