ios性能优化--label上汉字图层混合问题


说这个问题之前,我们先来说说什么是图层混合,图层混合为什么会影响性能?

首先弄懂这个问题,我们要先了解一下像素。
像素
屏幕上的每一个点就是一个像素,每个像素可有各自的颜色值,可采三原色显示,由R、G、B(有的还有alpha通道)构成。
像素的概念了解后,我们来说一下什么是图层混合?
图层混合
如果屏幕的一块区域上有多个图层(layer),每个图层都会有一定的透明度,那么最后这块区域的显示效果就是这些图层共同作用的结果,这种结果需要cpu对每个图层的颜色进行计算,需要消耗更多的cpu资源。如果我们把最上层的layer设定为不透明,那么cpu就不需要计算底层的layer的色值,这样就可以节约cpu的计算量,节约资源。


好了,进入正题:
我随意谢了个界面,打开Instruments,选择CoreAnmation,注意必须在真机上测试。
勾选color Blended Layers选项查看图层混合

图层混合选项

看到的效果是这样:

ios性能优化--label上汉字图层混合问题_第1张图片
label图层混合

发现label发生了图层混合,下面我们把label的背景颜色设置成白色(这个会经常忘记设置背景颜色)

设置背景颜色

再次测试,发现英文没有问题,但是中文确还是有图层混合的情况

ios性能优化--label上汉字图层混合问题_第2张图片
中文的图层混合

这个问题是由于中文的话,会有个子layer,解决办法就是选中cliptobonds


ios性能优化--label上汉字图层混合问题_第3张图片
解决

再次测试


ios性能优化--label上汉字图层混合问题_第4张图片
没有图层混合

发现已经没有图层混合的情况了。但是这里需要注意,如果label有圆角的需求,也就是当你用了layer.cornerredius一定不能用cliptobounds,这样会形成离屏渲染,离屏渲染如果过多会严重影响性能(掉帧),这种情况下如果图层混合可以不用管,我用coreanmation测试发现微信也没有处理label中文显示图层混合的问题,想来这个对性能的影响也不会很大。

你可能感兴趣的:(ios性能优化--label上汉字图层混合问题)