【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记11 View视图

一个view(视图)是IOS中UIView的子类,标示了屏幕上的一个长方形区域,定义了一个坐标系空间来绘图,并且处理触摸的操作。

技术分享

view是有层次的,一个view只能有一个superview,但是可以有多个subview。你可以获取一个view,当然返回值是可选的,或者获取一个view的所有subview,返回值是一个数组,虽然这个数组中的元素其实是AnyObject,因为一些历史遗留原因,不过没关系它里面的内容百分百是UIView,你不会获取到别的东西。

另外还有一个东西叫做UIWindow,它是UIView的子类,但是在IOS开发中你不需要关心,在每一个设备的屏幕上都会有一个UIWindow,它在最高层,但你不会向他发送任何消息,你也不跟它交互,你只需要关心UIView就行。

技术分享

views的层次结构通常不需要使用代码,你可以直接从storyboard中拖拽叠放。你也可以通过代码来创建,有两个方法可以实现,一个是addSubview,另一个是removeFromSuperview。addSubview向预期的superview发送消息,而removeFromSuperview向你需要移除的superView发送消息。

那么view层次结构的顶点或者说是根在哪呢,由于某些历史遗留问题,viewcontroller中有一个属性的名字叫做view,这就是你们在storyboard场景中的最高层次的view。

技术分享

接下来讲解一下如何初始化一个view。通常的建议是尽可能不要做一个初始化。UIView有两种构造器,代表了两种不同的构造方法。如果你写init(frame:CGRect),参数frame代表父视图中的frame,它是一个坐标系,代表将视图放到这个坐标系中。另一个是使用coder的方式进行初始化,如果你使用storyboard拖拽生成一个视图,那么这个视图是使用init(coder:NSCoder)的方式实现的。

如果要自己的做初始化,推荐的做法是同时实现两个初始化方法,第一个是一个designed的初始化方法,一旦你重写了它你就不能再继承其他designed的初始化方法了。另外还有一个required的初始化方法。然后把需要做的操作写到一个方法中在构造器中调用。这样的做法当且仅当你不得不自己写一个构造器的时候才用到。还有一个初始化的方法就是awakeFromNib如下:

技术分享

如果你需要在视图展示之前就要操作某些东西的时候使用这个方法,但是只有storyboard中的视图才会调用这个方法.接下来会讲解一下如何在视图中绘制和捕捉用户手势。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。