iOS 探索之 UIDebuggingInformationOverlay私有类

阐述
逛掘金的时候,发现大家都在研究 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          系统颜色审核
不晓得有什么用处, 研究半天里面没搞明白

资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值