阐述
逛掘金的时候,发现大家都在研究 UIDebuggingInformationOverlay 私有类,之前没见过这个类,尝尝鲜。
探索
总体感觉,UIDebuggingInformationOverlay实现效果跟 Reveal、FLEX之类的差不多,不过没有Reveal那种动态修改Frame的功能(也许是我没有找出来),但用来查看属性、对比效果图、测量尺寸还是挺方便的。(起码不用引入一大堆三方文件)
注: 因UIDebuggingInformationOverlay是苹果私有类,建议在上架前删除有关代码。
1 引入功能
在需要使用的地方加入相关代码(可在AppDelegate中引入,或在ViewController中引入),引入代码并运行后,相关调试界面会以窗口的形式浮在界面上。
具体版
Objective-C代码
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
#ifdef DEBUG
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
id overlayClass = NSClassFromString(@"UIDebuggingInformationOverlay");
[overlayClass performSelector:NSSelectorFromString(@"prepareDebuggingOverlay")];
id overlay = [overlayClass performSelector:NSSelectorFromString(@"overlay")];
[overlay performSelector:NSSelectorFromString(@"toggleVisibility")];
#pragma clang diagnostic pop
#endif
});
Swift代码
let overlayClass = NSClassFromString("UIDebuggingInformationOverlay") as? UIWindow.Type
_ = overlayClass?.perform(NSSelectorFromString("prepareDebuggingOverlay"))
let overlay = overlayClass?.perform(NSSelectorFromString("overlay")).takeUnretainedValue() as? UIWindow
_ = overlay?.perform(NSSelectorFromString("toggleVisibility”))
简化版
将 Objective-C 版和 Swift 版 overlay 对应的那两行删除。程序运行之后,两根手指同时点击状态栏,即可显示调试界面。
注: 简化版最好不要在模拟器下运行,因为两根手指根本不可能同时点击到状态栏。(Alt那种方式是以屏幕中间为中心点,模拟的双指不能同时碰到状态栏)
2 功能介绍
- View Hierarchy 视图层级结构
切换要调试的Window,查看该Window对应的视图层次关系,点击每一行的感叹号是可以查看对应视图的详情。
进入详情就可以查看View的Frame、Bounds、Class等属性,个人感觉Opacity调节功能是很酷的。
注: 最好启动UIDebuggingInformationOverlay服务完毕的时候,就先选择好View Hierarchy中的要显示的Current Window,不然后面有些功能不能使用。
- VC Hierarchy 控制器层级结构
可以查看ViewController的层级、属性,并且可以查看当前控制器是否为呈现模态或者正在呈现。
- Ivar Explorer 属性管理器
可以查看当前UIApplication的属性
- Measure 测量
在View Hierarchy选定Window之后,测量相关界面控件的尺寸、或是控件之间的距离(以Point为单位)。
该类测量有两种模式 Default 和 View Mode
a. Default 模式
控件与控件是相互独立的,手指移动的时候,可以清楚看出测量红线不会穿透其它控件。不过这种模式会忽略视图边界,将屏幕当做单一的格栅化的图像,利用色彩的变化作为边界进行测量,因此数值可能会有误差。
b. View Mode 模式
控件内容是独立的, 手指移动的时候,首先会查找到当前触摸点所在范围的控件,只会测量当前控件的尺寸。不是以颜色的变化作为边界进行测量的,并且其没办法测量控件之间相对的距离。
操作有三个选项
None、Vertical、Horizontal
a. None 不测量
b. Vertical 竖直方向测量
c. Horizontal 水平方向测量
- Spec Compare 设计图对比
有了这个功能之后,再也不用担心UI爸爸找你Trouble了,设计图与开发界面放在一起进行对比,可以清晰的看出有哪些不一致的。
使用步骤:
step 1 点击Add
step 2 从相册中选择一个设计图(或者界面截图),点击刚才添加的截图
step 3 手指在屏幕上下滑动,可以调节设计图和原界面的透明度。
step 4 双击屏幕退出当前模式
注: 此功能需要设备的相册权限,别忘了添加NSPhotoLibraryUsageDescription的描述值。
- System Color Audit 系统颜色审核
不晓得有什么用处, 研究半天里面没搞明白
资料