XCode中提供了工具来定位问题点,在XCode9.3之前,在Instrements
中的Core Animation
,在9.3版本之后,这些工具集成到了XCode中
在XCode的Debug
-> View Debugging
选项下是视图问题调试相关的工具。
-
Take Screenshot of xx iPhone
- 截图 -
Capture View Hierachy
- 查看视图层级关系 Show View Frames
Show Alignment Rectangles
Show View Drawing
Show Responsive Scrolling Status
-
Rendering
- 渲染相关的问题查看工具-
Color Blended Layers
- 图层混合检查当勾选该选项之后,发生图层混合的地方会用红色进行显示。
什么是图层混合:当一块区域有多个视图时,这里的颜色显示是由多个Layer共同决定的,GPU会计算混合颜色的值,然后显示在屏幕上。这个计算过程是GPU执行的。
如何解决该问题:所以对于只需要显示最上面的layer的,将最上面的layer设置为不透明,这样GPU就会忽略它下面的其他Layer。在代码中从下面三个角度去处理。
-
首先需要设置
UIView
的opaque
的属性为true
。 -
当视图为
UIImageView
时,不仅该控件要设置为不透明的。并且该控件所显示的图片也不能包含有alpha
通道。 -
给视图设置
backgroundColor
,当视图没有背景色的时候,仍然看做是透明的。
-
-
Color Hits Green and Misses Red
- 命中缓存的layer位图检查如果当前位置显示的内容是从缓存中获取的,用绿色进行标记
视图的显示最终是将
Layer
绘制成位图,然后再来进行显示。这里用于检查这个位图是否是从缓存中取出来的。 -
Color Copied Images
- 检查是否对图片进行格式转换操作如果产生了格式转换,会用蓝色显示。
GPU只解析32位的颜色格式,如果一张图片的颜色格式不是32位的,CPU会先将它的格式转换成32位的,然后再交给GPU去显示。
解决方案:重新使用32位的图片,或者开启一条子线程去执行这个操作。
-
Color Layer Formats
-
Color Immediately
-
Color Misaligned Images
- 图片尺寸缩放检查如果系统对图片进行缩放处理,就会用黄色进行标记。
当图片的尺寸和
UIImageView
的尺寸不一致的时候,图片就会进行缩放处理。图片的缩放处理也是需要占用时间的。 -
Color Offscreen-Rendered Yellow
- 离屏渲染检查发生了离屏渲染的地方会用黄色进行标记。
离屏渲染是很耗时的操作。
iOS9之后,设置圆角并且进行裁剪也不会产生离屏渲染了。
下面这些设置会产生离屏渲染。
-
阴影
-
遮罩
-
-
Color Compositing Fast-Path Blue
-
Flash Updateed Regions
-
Appearance
参考资料
https://bestswifter.com/uikitxing-neng-diao-you-shi-zhan-jiang-jie/
网友评论