1.Core Animation使用
-
图层混合 Color Blended Layers
UIView的opaque属性默认值就是true,也就是说只要不是人为设置成透明,都不会出现图层混合
对于UIImageView来说,不仅它自身需要是不透明的,它的图片也不能含有alpha通道
个人认为比opaque属性更重要的是backgroundColor属性,如果不设置这个属性,控件依然被认为是透明的
而是当UILabel内容为中文时,label的实际渲染区域要大于label的size,因为外围有了一圈的阴影,才会出现图层混合我们需要给中文的label加上如下代码:retweededTextLab?.layer.masksToBounds = true retweededTextLab?.backgroundColor = UIColor.groupTableViewBackground statusLab.layer.masksToBounds = true statusLab.backgroundColor = UIColor.white
Color Hits Green and Misses Red 光栅化
光栅化是将一个layer预先渲染成位图(bitmap),然后加入缓存中
“Color Hits Green and Misses Red”,它表示如果命中缓存则显示为绿色,否则显示为红色,显然绿色越多越好,红色越少越好图片格式转化 Color Copied Images
CPU主要处理两件事:
把图片从PNG或JPEG等格式中解压出来,得到像素数据
如果GPU不支持这种颜色各式,CPU需要进行格式转换,比如应用中有一些从网络下载的图片,“Color Copied Images”就用来检测这种实时的格式转化,如果有则会将图片标记为蓝色图片缩放 Color Misaligned Images
它表示如果图片需要缩放则标记为黄色,如果没有像素对齐则标记为紫色
图片的缩放需要占用时间,因此我们要尽可能保证无论是本地图片还是从网络或取得图片的大小,都与其frame保持一致。离屏渲染 Color Offscreen-Rendered Yellow
以下情况可能会导致触发离屏渲染:
1.重写drawRect方法
2.有mask或者是阴影(layer.masksToBounds, layer.shadow*),模糊效果也是一种mask
3.layer.shouldRasterize = true
解决方案是尽可能在滑动时避免设置圆角,如果必须设置圆角,可以使用光栅化技术将圆角缓存起来变化区域 Flash updated Regions
刷新视图时,我们应该把需要重绘的区域尽可能缩小。对于未发生变化的内容则不应该重绘
解决方案