instrument 之 core animation

1、Color Blended Layers

图层混合 需要消耗一定的GPU资源,避免设置alpha小于1,省去不必要的运算

2、Color Hits Green and Misses Red

光栅化 view.layer.shouldRasterize = YES;光栅化是将一个layer预先渲染成位图(bitmap),然后加入缓存中。如果对于阴影效果这样比较消耗资源的静态内容进行缓存,可以得到一定幅度的性能提升

3、Color Copied Images

图片格式  把图片从PNG或JPEG等格式中解压出来,得到像素数据, 如果GPU不支持这种颜色各式,CPU需要进行格式转换

4、Color Misaligned Images

图片的缩放   图片的缩放需要占用时间,因此我们要尽可能保证无论是本地图片还是从网络或取得图片的大小,都与其frame保持一致。

5、Color Offscreen-Rendered Yellow

离屏渲染  表示渲染发生在屏幕之外。离屏渲染意味着把渲染结果临时保存,等用到时再取出,因此相对于普通渲染更占用资源。

1、重写drawRect方法;(自动触发离屏渲染)
2、有mask或者是阴影(layer.masksToBounds, layer.shadow*),模糊效果也是一种mask;(自动触发离屏渲染)
3、layer.shouldRasterize = true;(手动开启离屏渲染)

解决办法:imgView.layer.shadowPath = UIBezierPath(rect: imgView.bounds).CGPath

指定了阴影路径,如果没有手动指定,Core Animation会去自动计算,这就会触发离屏渲染。如果人为指定了阴影路径,就可以免去计算,从而避免产生离屏渲染。

设置cornerRadius本身并不会导致离屏渲染,但很多时候它还需要配合layer.masksToBounds = true使用。根据之前的总结,设置masksToBounds会导致离屏渲染。

必须设置圆角,可以使用光栅化技术将圆角缓存起来view.layer.shouldRasterize = true

猜你喜欢

转载自www.cnblogs.com/diyigechengxu/p/10092275.html