ios中的视图调试(ios8苹果引入了强大的新技术,不可不看)

在ios8以前,我们想要进行ui实时调试,可以依赖的技术手段有:

用xcode启动app,然后点击xcode暂停运行按钮,然后在调试控制台输入下面语句:

po [[UIWindow keyWindow] recursiveDescription]

然后就可以看到完整的UI结构和层级关系,类似如下:

<UIWindow: 0x7b691cd0; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x7b6921f0>; layer = <UIWindowLayer: 0x7b691e00>>

| <UIView: 0x7c078b30; frame = (0 0; 320 480); autoresize = W+H; autoresizesSubviews = NO; layer = <CALayer: 0x7c078440>>

|    | <UIView: 0x7c078ca0; frame = (10 87; 145 145); autoresize = RM+BM; autoresizesSubviews = NO; layer = <CALayer: 0x7c0786e0>>

|    | <UIView: 0x7c078f20; frame = (165 87; 145 145); autoresize = RM+BM; autoresizesSubviews = NO; layer = <CALayer: 0x7c078630>>

|    | <_UILayoutGuide: 0x7c079130; frame = (0 0; 0 20); hidden = YES; layer = <CALayer: 0x7c0792d0>>

|    | <_UILayoutGuide: 0x7c079710; frame = (0 480; 0 0); hidden = YES; layer = <CALayer: 0x7c079790>>

po [self.view recursiveDescription]可以看到当前view下的ui结构,示例如下:

<UIView: 0x7ca8ceb0; frame = (0 0; 600 600); autoresize = RM+BM; autoresizesSubviews = NO; layer = <CALayer: 0x7ca8cb30>>

| <UIView: 0x7ca73890; frame = (10 87; 285 285); autoresize = RM+BM; autoresizesSubviews = NO; layer = <CALayer: 0x7ca89200>>

| <UIView: 0x7ca7f520; frame = (305 87; 285 285); autoresize = RM+BM; autoresizesSubviews = NO; layer = <CALayer: 0x7ca7ce70>>

| <_UILayoutGuide: 0x7ca8bd30; frame = (0 0; 0 0); hidden = YES; layer = <CALayer: 0x7ca814d0>>

| <_UILayoutGuide: 0x7ca93b20; frame = (0 0; 0 0); hidden = YES; layer = <CALayer: 0x7ca8d530>>

另外reveal等工具也可以实现可视化分析ui的功能,该工具收费(有30天的免费试用期)。

在ios8/xcode6以后,苹果引入了新的技术手段支持我们进行实时ui调试;使用xcode运行app过程中,按下底部的Debug
View Hierarchy 按钮,或者从菜单中选择Debug > View Debugging > Capture View Hierarchy 来启动视图调试:

启动视图调试后,Xcode会对应用程序的视图层次拍一个快照并展示三维原型视图来探究用户界面的层级。该三维视图除了展示app的视图层次外,还展示每个视图的位置、顺序和视图尺寸,以及视图间的交互方式。

该调试工具非常强大,结合storyboard一起使用可以很好的支撑ios开发的页面布局调整/性能优化等需求,具体的功能这里不一一展开,请开发人员在使用中进行总结和摸索。

时间: 2024-12-06 02:50:28

ios中的视图调试(ios8苹果引入了强大的新技术,不可不看)的相关文章

浅谈iOS中的视图优化

引言: 让我们来思考几个问题,你开发过的产品,它还有可以优化的地方吗?能增加它的帧率吗?能减少多余的CPU计算吗?是不是存在多余的GPU渲染?业务这点工作量对于越来越强大的设备面前显得微不足道,但作为一个细心的开发者,我觉得很有必要来谈谈iOS中的视图优化. 本文从开发者最容易犯错的地方出发,结合例子,从以下几个角度阐述如何进行视图优化: Color Blended Layers Color Copied Images Color Misaligned Images Color Offscree

IOS中标签视图和Block

标签视图控制器 - UITabBarController 自定义UITabBarItem 自定义导航栏和标签栏背景图片 三个视图控制器的综合使用 一. 标签视图控制器  UITabBarController UITabBarController有以下重要属性 viewControllers   显示的视图控制器 tabBar                  标签栏 delegate                协议 tabBar 是 UITabBar对象, 包含多个UITabBarItem,

Swift - iOS中各种视图控制器(View Controller)的介绍

在iOS中,不同的视图控制器负责不同的功能,采用不同的风格向用户呈现信息.下面对各个视图控制器做个总结: 1,标准视图控制器 - View Controller 这个控制器只是用来呈现内容.通常会用来作为子类,以向屏幕中添加逻辑. 2,导航控制器 - Navigation Controller 这个控制器呈现一个视图控制器的栈,应用程序可以在上面推入更多的视图控制器. 当新视图推入栈,或旧视图弹出栈时,导航控制器会以动画的形式(比如卷动)显示隐藏这些视图. 使用样例:系统“设置”应用程序 3,表

iOS中web app调试(mac).md

目录 一.真机联调配置 二.mac上Safari配置及真机联调 三.iOS模拟器使用 四.在iOS模拟器中安装app 近期公司vue项目开发,目的是一次开发,多平台发布,其中就包含了app,app采用离线web方案,将vue打包后的js bundle文件.静态资源文件打包进app中,为提高性能.优化体验,app也通过jsbridge,暴露原生接口给web调用. 为此,web app开发时可以使用chrome等pc模拟器进行调试,但是涉及app适配,特别是原生接口调试时,就比较麻烦,必须要依赖于真

iOS中多视图的传值 属性传值和代理传值

首先创建两个类 ,FirstViewController和SecondViewController,都继承于UIViewController 1 #import "AppDelegate.h" 2 #import "FirstViewController.h" 3 4 @interface AppDelegate () 5 6 @end 7 8 @implementation AppDelegate 9 10 11 - (BOOL)application:(UIAp

IOS中多视图应用设置首界面

XCODE版本:6.4 IOS版本:8.4 错误: View Switcher[4883:389088] Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set? 因为书上使用的较旧的版本,xcode6之前的版本在创建项目时有"empty application"模板,但是6.4没有这

IOS中集合视图UICollectionView中DecorationView的简易使用方法

转载自:   http://www.it165.net/pro/html/201312/8575.html Decoration View是UICollectionView的装饰视图.苹果官方给的案例都没涉及到这个视图的使用.没有具体的细节.我今天用UICollectionView做了一个简易的书架.主要是Decoration View的使用方法. 效果如下: 基本的UICollectionView使用方法请自己查询. #import "CVViewController.h" #imp

iOS中的视图跳转的三种方式(代码跳转,根据桥跳转,按钮跳转)

#import "ViewController.h" #import "SecondViewController.h" @interface ViewController () @property (retain, nonatomic) IBOutlet UITextField *textField; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // D

iOS中崩溃调试的使用和技巧总结 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 在iOS开发调试过程中以及上线之后.程序经常会出现崩溃的问题.简单的崩溃还好说,复杂的崩溃就须要我们通过解析Crash文件来分析了,解析Crash文件在iOS开发中是比較常见的. 如今网上有非常多关于解析崩溃信息的博客.可是大多质量參差不齐,或者有些细节没有注意到.今天写一篇博客总结一下我对崩溃调试的使用和技巧,假设有哪些错误或遗漏.还请指点.谢谢. 获取崩溃信息 在iOS中获取崩溃信息的方式有非常多,比較常见的