UIView显示在屏幕上归功于CALayer,通过调用drawRect方法来渲染自身的内容,调节CALayer属性可以调整UIView的外观, UIView继承自UIResponder,比起CALayer...可以响应用户事件,Xcode6之后可以方便的通过视图调试功能查看图层之间的关系 UIView是iOS系统中界面元素的基础,所有的界面元素都继承自它。...补充部分,这部分有深度了,大致了解一下吧,UIView的layer树形在系统内部被系统维护着三份copy 逻辑树,就是代码里可以操纵的,例如更改layer的属性等等就在这一份 动画树,这是一个中间层,系统正是在这一层上更改属性...,进行各种渲染操作 显示树,这棵树的内容是当前正被显示在屏幕上的内容 这三棵树的逻辑结构都是一样的,区别只有各自的属性 loadView的作用?...先遍历最后添加的子控件)遍历子控件,重复前面的两个步骤 如果没有符合条件的子控件,那么就自己处理 事件响应者链 如果当前view是控制器的view,那么就传递给控制器 如果控制器不存在,则将其传递给它的父控件 在视图层次结构的最顶层视图也不能处理接收到的事件或消息
方法后,这个 UIView/CALayer 就被标记为待处理,并被提交到一个全局的容器去。...应该尽量避免调整视图层次、添加和移除视图。可以通过隐藏,显示来控制 4 布局方面:尽量提前计算好布局,在需要时一次性调整好对应属性,而不要多次、频繁的计算和调整这些属性。...随着视图数量的增长,Autolayout 带来的 CPU 消耗会呈指数级上升 6 尽量减少在短时间内大量图片的显示,尽可能将多张图片合成为一张进行显示。...7 应用应当尽量减少视图数量和层次,也可以用上面的方法,把多个视图预先渲染为一张图片来显示。...中。
- (BOOL)isDescendantOfView:(UIView *)view 参数 view 一个视图用来测试子视图在视图层次中的关系 返回值 如果接收者是视图的子视图就返回YES...viewWithTag: 返回视图的特定的标签 - (UIView *)viewWithTag:(NSInteger)tag 参数 tag 一个用来在视图中搜索的标签 返回值 视图在接收者层次中符合的标签...消息或者子视图从接收者视图层次中移除因为它要被添加到其他视图了 3 UIView动画 3.1 概述 UIView视图的动画功能,可以使在更新或切换视图时有放缓节奏、产生流畅的动画效果,进而改善用户体验...• 改变透明度:改变视图的alpha值。 • 改变状态:隐藏或显示状态。 • 改变视图层次顺序:视图哪个前哪个后。 ...,所以ViewE变成了该次触摸事件的hit-Test View; 5.1.2 注意点 1、默认的hit-testing顺序是按照UIView中Subviews的逆顺序; 2、如果View
在UIKit框架中都有一个UIWindow来容纳我们的View。应用程序中几乎全部的可视控件都是UIView以及UIView的子类的实例,并且UIWindow也是UIView的子类。...UIWindow可以不借助于父类视图显示在屏幕上,其余的视图都需要添加到父视图中才能显示。...我们空工程的文件结构如下,我们只需在AppDelegate.m中添加我们的视图,还是那句话为了更好的理解我们的视图,所有视图的创建和配置我们都用代码编写。 ? ...添加一个视图 视图的层次用index来区分,这个值从0开始以步长1依次增加,index为0的时候代表视图层次的最底层,下面是苹果官方文档对Views的介绍的截图: ? ...视图层大致分为下面的几类 1.容器视图 容器视图用于增强其他视图的功能,或者为视图内容提供额外的视觉分隔,比如UIScorllView类用于显示因内容太大而无法显示在一个屏幕上的视图
14 查看项目编译时间 在终端中输入defaults write com.apple.dt.Xcode ShowBuildOperationDuration -bool YES 15 UIView拖拽...在 storyboard 或者 xib 中将一个 UIView 拖拽到另一个 UIView 时会默认成为其子 view,如果按住command进行拖拽即可成为平级关系。...18 视图测试 在 View debugging 时,选择某个 UIView,然后使用快捷键command + shift + D可以快速在左侧的调试导航器中定位该 UIView。...22 storyboard查看视图层次 在 storyboard 中,可以通过shift + 右击UIViewController或者control + shift + 单击UIViewController...查看某个 UIViewController 的视图层次结构。
,提供了许多属性和方法:显示效果控制(frame、alpha等)、视图添加和移除(addSubview: 等)、视图层次调整(bringSubviewToFront:等)等。...UIView的属性frame、bounds、center 1)frame:描述当前视图在其父视图中的位置和大小; frame是一个结构体,包含2部分内容:origin和size。...UIView提供了其他添加视图的方法(详见下表): ? 2)管理视图层次 UIView除了提供添加视图的方法,还提供了管理视图层次的方法(详见下表): ?...(1)UILabel(标签):是显示文本的控件,在App中UILabel是出现频率最高的控件。...在App中UITextField出现频率也比较高; (2)iOS系统借助虚拟键盘实现输入,当点击输入框,系统会自动调出键盘,方便 你进一步操作。
在iOS中,动画广泛用于重新定位view,更改大小,将其从view层次结构中移除,并将其隐藏起来。 您可以使用动画将反馈传达给用户或实现有趣的视觉效果。...在UIKit中,动画是使用UIView对象执行的。 view支持一组涵盖许多常见任务的基本动画。...在View之间创建动画转换 view转换可帮助您隐藏与在view层次结构中添加,删除,隐藏或显示view相关的突然更改。...用不同的view替换view层次结构中的一个view。 如果要替换跨越全部或大部分屏幕的view层次结构,通常选择此选项。...在传递给此方法的动画块中,通常动画的唯一更改是与显示,隐藏,添加或删除子view相关的更改。将动画限制为该集合允许view创建view之前和之后版本的快照图像,并且在两个图像之间创建动画,这更高效。
AppDelegate —> SceneDelegate 在 SceneDelegate 的willConnectToSession中纯代码初始化 UIWindow,并设置显示的第一个控制器。...UIView与UIViewController 初步印象 iOS 开发中,一个界面就是一个 UIViewController(视图控制器),界面上显示的内容就是 UIView(视图)。...所有放在界面上的 UI 控件都放在 UIViewController 的 UIView 之上,在 UIViewController 的代码中可以通过self.view属性获取它。...UIView添加到UIViewController的View.png UIView的容器概念 UIView 中可以放其他的 UIView。 UIView 的层次关系(平级与包含)。...exchangeSubviewAtIndex:将2个位置的视图互换。 演示UIView与UIViewController Storyboard 注意左侧面板的视图层次结构。
UIView类包含一个tag属性,您可以使用它来为各个view对象添加一个整数值。 您可以使用tag唯一地标识view层次结构中的view,并在运行时执行对这些view的搜索。...每个view的window属性包含当前显示view的window(如果有的话)。 由于view层次结构中的root view没有父view,因此其superview属性设置为nil。...但是,隐藏的view会参与与view层次关联的自动调整和其他布局操作。因此,隐藏view通常是从view层次结构中删除view的一种方便的替代方法,特别是如果您计划在不久的将来再次显示view时。...定位View Hierarchy中的view 在view层次结构中定位view有两种方法: 将指针存储在适当位置的任何相关view中,例如拥有view的VC中。...对于view层次结构中的每个view,将该view的autoresizingMask属性设置为适当的值是处理自动布局更改的重要部分。
What's UIView在iOS开发中,这个使用频率非常高的控件,同时在iOS 所有原生的视图都是由UIView派生而来....视图在屏幕上可以是一个矩形块,它能够拦截类似鼠标点击或者触摸手势等用户交互方式. 并且在层级关系上可以互相嵌套,一个视图可以管理它所有的子视图的位置等.在开发项目过程中,这是非常常见的一个使用场景....在Core Animation的类层次结构图中,可以发现图层类(LayerClasses) 是Core Animation 的核心基础....和UIView 一样,CALayer 也是有自己的父图层类,以及同样拥有子图层类的集合. 它构成了一个图层树的层次结构....UIView 与 CALayer 平行的层级关系 每个UIView 都会有一个CALayer 实例图层属性.也就是backing layer.UIView 的职责就是创建并管理这个图层.用来确保当前子视图在层级关系中添加或者移除的时候
无论你是使用系统视图还是自定义视图,都需要理解由UIVIew和UIWindow类所提供的基础结构。这些类提供复杂的设施来管理视图的布局和显示。...视图结构的基本原理#### 表面上,你可能想去做的就是处理视图对象(UIView的子类).一个视图对象规定了视图上矩形区域,并且在矩形区域上处理绘画和触摸事件。...视图层次和子视图的管理#### 一个视图在呈现自身内容之外,还可以作为其他视图的容器。当一个视图包含另一个视图时,两个视图间的父子关系就创建出来了。在关系中,孩子视图就是子视图,父亲视图就是超视图。...每一个父视图都将子视图存储在一个有序的数组中,这个顺序影响着每个子视图可视度。如果两个兄弟视图相互重叠,最后加入的视图将会最先显示。 父子视图的关系也影响着一些视图行为。...另一些影响子视图的变化有:隐藏父视图、改变父视图的透明度、将数学变化应用到父视图的坐标系统中。 在视图层次中管理视图决定着你的应用是如何响应事件的。
UIView和CALayer是一个平行的层级关系,每一个UIView都有一个CALayer实例的图层属性,也就是所谓的backing layer,视图的职责就是创建并管理这个图层,以确保当子视图在层级关系中添加或者被移除的时候...UIView 的 Layer 在系统内部,被维护着三份同样的树形数据结构,分别是: 图层树(这里是代码可以操纵的,设置属性的最终值会立刻在这里更新); 呈现树(是一个中间层,系统就在这一层上更改属性,进行各种渲染操作...比如一个动画是更改alpha值从0到1,那么在逻辑树上此属性会被立刻更新为最终属性1,而在动画树上会根据设置的动画时间从0逐步变化到1); 渲染树(其属性值就是当前正被显示在屏幕上的属性值); CADisplayLink...当一个触摸事件到来时,RunLoop 被唤醒,App 中的代码会执行一些操作,比如创建和调整视图层级、设置 UIView 的 frame、修改 CALayer 的透明度、为视图添加一个动画;这些操作最终都会被...方法后,这个 UIView/CALayer 就被标记为待处理,并被提交到一个全局的容器去。
这让永远都只在viewDidLoad写作的童鞋们情何以堪吶。 这些其实都和生命周期有关,和viewController以及view的各种加载顺序有关。这篇文章就小小撸一下这中间的关系和顺序。 2....Default does nothing 对象的视图已经消失、被覆盖或是隐藏时调用. UIViewController类提供一些方法,用来判断为什么view外观发生更改。...调用addSubivew:成功后会给该视图发送didAddSubivew:回调,触发UIView的子类在新增视图时执行其他操作。...willMoveToWindow:在视图移动前发出的回调。 willRemoveToSubview:回调通知父视图子视图即将被删除 4. 内存警告 首先要判断一下,当前view有没有被显示。...如果正在显示,做处理,会让用户感觉很不舒服。 更严谨一点,还需要判断view是否已经加载。如果没有加载,就不需要干掉了。 实际开发中为了写的少点,都会写在基类控制器中。
这需要我们在loadView 方法中,通过编程创建自己的视图层次,并且把把根视图赋值给UIViewController的view属性。...此时整个视图层次(view hierarchy)已经被放到内存中。 无论是从nib文件加载,还是通过纯代码编写界面,viewDidLoad方法都会执行。...合创建一些附加的view和控件 3、ViewWillAppear 在视图加载完成,并即将显示在屏幕上时,会调用viewWillAppear方法,在这个方法里,可以改变当前屏幕方向或状态栏的风格等。...在这个方法中,还可以对视图做一些关于展示效果方面的修改。...根据window显示级别优先原则,级别高的会显示在最上层,级别低的在下面,我们程序正常显示的view在最底层; 六、APP架构 七、整体架构
UIView UIView类定义了一个矩形区域在屏幕上和管理内容的接口。 Overview 在运行时,一个视图对象处理任何内容的呈现它的面积,还处理任何与内容交互。...视图可以使用addGestureRecognizer(_)方法安装手势识别器来处理常见的手势。 视图可以嵌入其他视图,创建复杂的视觉层次。...该方法的实现负责绘制视图的内容到当前图形上下文,这是系统设置的自动调用该方法之前。这将创建一个静态视图的可视化表示的内容可以显示在屏幕上。当视图的实际内容发生变化时,你有责任通知系统视图需要重绘。...Animations 几个视图属性可以更改该对象animated,改变属性创建一个动画,这种改变在很短的时间内传达给用户。...因此,你应该叫UIView类的方法从代码中运行您的应用程序的主线程。这可能不是严格必需是唯一一次在创建视图对象本身,而是所有其他操作应该发生在主线程。
例如,模型对象可能是表示游戏中的角色或地址簿中的联系人。用户在视图层中所进行的创建或修改数据的操作,通过控制器对象传达出去,最终会创建或更新模型对象。...模型对象更改时(例如通过网络连接接收到新数据),它通知控制器对象,控制器对象更新相应的视图对象。 1.1.2视图对象 视图对象是应用程序中用户可以看见的对象。...视图对象知道如何将自己绘制出来,并可能对用户的操作作出响应。视图对象的主要目的,就是显示来自应用程序模型对象的数据,并使该数据可被编辑。尽管如此,在 MVC 应用程序中,视图对象通常与模型对象分离。...在iOS应用程序开发中,所有的控件、窗口等都继承自 UIView,对应MVC中的V。...1.1.3控制器对象 在应用程序的一个或多个视图对象和一个或多个模型对象之间,控制器对象充当媒介。控制器对象因此是同步管道程序,通过它,视图对象了解模型对象的更改,反之亦然。
视图控制器对象提供基础结构,来管理内容相关的视图并协调视图的显示与隐藏。视图控制器还用来管理应用程序视图的子层次结构。...用于在主屏幕上呈现内容,但应用程序可能会有另外一个窗体,将内容显示在外接显示器上。 要更改您的应用程序的内容,需使用视图控制器,来更改在相应窗体中显示的视图。...通过直接将 UIView(或它的子类)子类化。您还能够定义自己的自定视图。 除了包含视图和控制以外,应用程序还能够将 Core Animation 层并入其视图和控制分层结构中。...应用程序所显示的视图,会排列成层次结构(直观上基于包括)。此模式同意应用程序将单个视图和合成视图同等对待。 层次的根部为一个窗体对象;根部下面的每一个视图,都有一个父视图,以及零个或多个子视图。...父视图包括子视图。 视图层次是画图和事件处理的结构性组件。 IOS框架中的模型对象能够由UIKit框架提供的UIDocument对象来实现文档类型的数据模型。
可添加完成的代码块,在操作完成后执行。 添加操作之间的依赖关系,设定操作执行的优先级,方便的控制执行顺序;设置最大并发数。 可以很方便的取消一个操作的执行。...全局区/静态区(staic):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。...自动释放池的结构 __AtAutoreleasePool 实际是一个结构体,在内部首先执行objc_autoreleasePoolPush(),然后在调用objc_autoreleasePoolPop...卡顿产生的原因 卡顿产生的原因 在 VSync 信号到来后,系统图形服务会通过 CADisplayLink 等机制通知 App,App 主线程开始在 CPU 中计算显示内容,比如视图的创建、布局计算...,尽可能将多张图片合成一张进行显示 GPU能处理的最大纹理尺寸是4096x4096,一旦超过这个尺寸,就会占用CPU资源进行处理,所以纹理尽量不要超过这个尺寸 尽量减少视图数量和层次 减少透明的视图(alpha
2UIView动画 2.1概述 UIView视图的动画功能,可以使在更新或切换视图时有放缓节奏、产生流畅的动画效果,进而改善用户体验。...UIView可以产生动画效果的变化包括: •位置变化:在屏幕上移动视图。 •大小变化:改变视图框架(frame)和边界。 •拉伸变化:改变视图内容的延展区域。...•改变透明度:改变视图的alpha值。 •改变状态:隐藏或显示状态。 •改变视图层次顺序:视图哪个前哪个后。 •旋转:即任何应用到视图上的仿射变换(transform)。...可能的值定义在UIViewAnimationTransition中。 view 需要过渡的视图对象。...cache 如果是YES,那么在开始和结束图片视图渲染一次并在动画中创建帧;否则,视图将会在每一帧都渲染。例如缓存,你不需要在视图转变中不停的更新,你只需要等到转换完成再去更新视图。
; HitTest的顺序 UIApplication -> UIWindow -> Root View -> subview -> ··· -> initalView 系统检测到手指触摸(Touch)...操作时,将Touch 以UIEvent的方式加入UIApplication事件队列中。...UIApplication从事件队列中取出最新的触摸事件进行分发传递到UIWindow进行处理。...:原理 // point是该视图的坐标系上的点 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { // 1.判断自己能否接收触摸事件...super的touches方法),从之前往下走的路线往上回传,在其中加入了Viewtroller来处理 如果view的控制器存在,就传递给控制器;如果控制器不存在,则将其传递给它的父View 在视图层次结构的最顶级视图
领取专属 10元无门槛券
手把手带您无忧上云