转自 http://www.jianshu.com/p/36b887a722a7
UIDebuggingInformationOverlay是继承自UIWindow的私有类,是Apple调试们自己的app的时候用的,并没有开放给开发者。然而,这个私有类最近国外一个哥们偶然发现,发现这个工具真实太强大了。下面介绍一下这个东西怎么用。
-
当我们调出它的时候,它的debug窗口就会在整个Window之上,如下:
- 那么如何调出这个工具呢,废话不多说,只需要在AppDelegate.m中的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中加入以下代码即可:
#ifdef DEBUG//因为这个是私有的api,一定要保证上线时的包中不包含这段代码!
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
id debugClass = NSClassFromString(@"UIDebuggingInformationOverlay");//获得对象
[debugClass performSelector:NSSelectorFromString(@"prepareDebuggingOverlay")];//开启调试模式
#pragma clang diagnostic pop
#endif
-
运行工程,app启动之后,用2个手指点击状态栏就会调出debug窗口,再次点击就会消失。
- 你也可以在需要的地方手动弹出debug窗口:
#ifdef DEBUG//因为这个是私有的api,一定要保证上线时的包中不包含这段代码!
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
id debugClass = NSClassFromString(@"UIDebuggingInformationOverlay");//获得对象
[debugClass performSelector:NSSelectorFromString(@"prepareDebuggingOverlay")];//开启调试模式
id debugOverlayInstance = [debugClass performSelector:NSSelectorFromString(@"overlay")];//手动弹出窗口
[debugOverlayInstance performSelector:NSSelectorFromString(@"toggleVisibility")];
#pragma clang diagnostic pop
#endif
-
关于这个debug窗口中各个模块的用法,我简单的总结如下,大家最好自己体验一下,cool。
- View Hierarchy
展示当前window下的view列表、包含关系,而且可以看到每个view的详细信息,位置、透明度、甚至view的属性值,感觉比另一软件Reveal都强大。 - VC Hierarchy
展示当前控制器的继承关系。而且可以看到控制器的详细信息。 - Ivar Explorer
展示UIApplication,以及其他对象的当前的属性值。 - Measure
这个是非常好用的功能,可以查看屏幕中元素之间的尺寸,选择Vertical或者Horizontal,然后用手指在你想要查看的界面上滑动,看到了吧,试试吧 - Spec Compare
你可以把你相册中的图片暂时的导入当前的window上,而且导入之后可以在图片上滑动手指来调整图片的透明度,想象一下,你可以把设计师的设计稿导入查看效果。 - System Color Audit
目前还不知道,这个有什么用(摊手)。
- View Hierarchy
谢谢阅读此文,希望它能对你有用。