UIDebuggingInformationOverlay调试信息窗口的使用

本文由陈云峰翻译

在最近浏览UIKit的私有头部时,我遇到了一个我以前没看过的类UIDebuggingInformationOverlay 。 Google搜索没有提供太多的信息,所以我想写一个简短的描述,我发现了一点有意思的东西。

UIDebuggingInformationOverlay是由Apple创建的私有UIWindow子类,大概是帮助开发人员和设计师调试苹果自己的iOS应用程序。

启用后,窗口会浮动在应用的内容上,如下所示:

UIDebuggingInformationOverlay

在这篇文章中,我将向您展示如何使其显示。 我也会总结一下其功能,至少在我理解的时候。

如何显示UIDebuggingInformationOverlay

在中显示UIDebuggingInformationOverlay需要两个步骤:

1.在程序初始化时调用,一般在AppDelegate中:
Class debugCls = NSClassFromString(@"UIDebuggingInformationOverlay");
[debugCls performSelector:NSSelectorFromString(@"prepareDebuggingOverlay")];

不知道这个方法是做什么的,但如果不调用它,Overlay将是空的。

2.在要显示调试窗口的地方调用:
Class someClass = NSClassFromString(@"UIDebuggingInformationOverlay");
id obj = [someClass performSelector:NSSelectorFromString(@"overlay")];
[obj performSelector:NSSelectorFromString(@"toggleVisibility")];

因为类和它的方法是私有的,你需要跳过几个环来获取编译代码。 一种方法是使用全局”NSClassFromString”和”NSSelectorFromString”函数。 在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"))

但是,您选择这样做,请确保代码不会进入您的App Store构建,否则您可能会被拒绝。

更新,2017年5月26日:感谢Bryce Pauken,谁发现一旦你打了[UIDebuggingInformationOverlay prepareDebuggingOverlay] ,你可以[UIDebuggingInformationOverlay prepareDebuggingOverlay]点击状态栏来显示控制台。 无需调用toggleVisibility

什么UIDebuggingInformationOverlay可以做

从上述屏幕截图可以看出,覆盖层提供了七个功能。 我会简要介绍一下前六个。 我无法获得”系统颜色审核”屏幕来显示任何内容,如果你有更好的运气,给我发消息。

“查看层次结构”屏幕

这个屏幕显示你可能会期待什么 在所选窗口中的视图列表。 从这里,您可以检查任何视图的细节,包括其框架和实例变量。 如果您有多个窗口,还可以在窗口之间切换,或者只是想知道如何构建系统窗口。

"查看层次结构"屏幕"查看层次"信息屏幕

“VC层次结构”屏幕

您可以预测此屏幕的作用。 它与”查看层次结构”屏幕非常相似,只是它显示了主动视图控制器的层次结构。 从这里,您可以检查任何视图控制器的细节,包括其视图。 您还可以看到视图控制器是呈现模态还是呈现。

'VC层次'屏幕

“Ivar Explorer”屏幕

此屏幕可让您访问UIApplication实例的变量。 更重要的是,还可以探索任何对象变量。 这包括应用程序委托,根据应用程序的结构,可以为您的自定义对象提供一个方便的入口点。

'Ivar Explorer'屏幕

“测量”屏幕

在我看来,这是叠加层的更酷功能之一。 它可以测量屏幕元素的尺寸(以点为单位)。首先,选择是否要在”水平”或”垂直”轴上查看测量。 然后在屏幕上拖动手指,使用控制台内的放大查看器来协助您。 有两种模式:

默认模式忽略视图边界。 据我所知,此模式将屏幕视为单个光栅化图像,并将颜色变化用作潜在测量的边界。 例如,在下面的截图中,我可以测量标签文本的末尾与屏幕边缘之间的距离:

赖恩-彼得森

另一方面,”查看模式”显示子视图的大小。 将手指拖动到视图上以查看所选轴的尺寸。在这个屏幕截图中,我正在测量屏幕顶部的文本框的高度:

赖恩-彼得森

“规格比较”屏幕

我可以看到这是开发和设计之间协作的一个非常有用的工具。 将屏幕截图添加到设备,然后从”规格比较”屏幕中选择。 所选屏幕截图将显示在实际应用程序的顶部。 然后,您可以向下拖动以减少alpha值,并将规范与实际实现进行比较。

更新,2017年5月26日: Patrick Balestra提醒我,我没有重要的一步。 您需要在Info.plist中包含NSPhotoLibraryUsageDescription键的值。 点击”添加”按钮可以显示一个UIImagePickerController ,而不需要设置此值即可使您的应用程序崩溃。

赖恩-彼得森

赖恩-彼得森

封装

我只玩了几天玩这个东西,但希望在下一个测试版中使用它。 控制台有一些粗糙的边缘,但它似乎是许多开放源代码工具的有前途的替代品。 如果您有机会使用它并注意到我错过的任何事情,请随时联系。 我会更多的了解更多信息。

原文地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值