view实际上就是一个在
application的key window上的UIView的实例,是一个方形的视图。View主要负责以下几点的工作:
|
View Architecture Fundamentals
view(UIView
)与layers(CALayer)的关系?
UIView(user interaction view)用户交互界面,CALayer(Core Animation Layer)核心动画层。顾名思义,可以看出CALayer负责图形的显示与动画效果,而UIView负责触摸事件的传递与处理、子视图管理的功能,UIView持有至少一个CALayer。
所有会有这样的一个场景,就是我们设置了核心动画效果,在动画的过程中无法交互,而且在动画结束后,图形会自动回到原来的位置,那是因为图形参数的改变仅仅作用与CALayer而不是UIView,当动画结束后,UIView的参数会自动覆盖到CALayer的参数中,因此图形会复位。
图形内容重用?
每当一个View需要绘制或者需要重新绘制,iOS就会执行该View的绘制代码,然后生成一个点阵快照保存起来,从而显示在液晶屏幕上的。只有当图形界面的内容发生改变才需要重新绘制,不然要尽可能地重用,因为绘制过程比较消耗资源。
View Hierarchies and Subview Management,view图层与子视图管理?
一个View可以作为其他View的容器,当其他View添加到了一个View上,它们就建立了superView-childView的关系。而superView是通过一个特点的array来管理它的子类的,这个array会存储按照相应顺序添加到superView的childView,并且按照这个顺序来绘制superView内的childView,也可以通过相应的方法来改变array的顺序来改变图形的显示效果。
superView的改变会对childView造成影响,如若superView的frame发生改变,那么childView也应该发生相应的形变来适配。若superView改变alpha值、或者设置了禁止交互,那么childView的相应值也会跟随着改变。
The View Drawing Cycle?
iOS系统屏幕的扫描频率是60HZ,也就是一秒更新屏幕内容60次。当一个View需要显示在屏幕的时候,它会执行它的绘制代码并生成一个快照,当view没有发生改变的时候,界面会一直复用这个快照来显示内容,直到绘制代码重新执行。
当你需要手动启动绘制代码,你需要调用setNeedDisplay or setNeedDisplayInRect两个方法中的其中一个,当这两个方式执行后,系统就会在下一个绘制周期内执行drawRect方法。通常系统自带的View都是默认实现了drawRect,而custom view需要自己定义该方法完成内容的绘制。
所以对于一个view来说,initial方法完成变量的定义,而drawRect方法负责内容的绘制。
Content Mode?
contentMode属性决定快照(点阵位图)是否应该缩放适配新的bound或者总是固定在某个位置,contentMode有以下数值:
|
View programming guide decument
最新推荐文章于 2019-12-02 08:50:40 发布