iOS开发iOS学习开发

View篇之深入探讨布局属性

2016-04-20  本文已影响38人  我花开后百花殺


概念


View的几何性质是通过它的frame、bounds和center属性定义的。frame定义了视图在父视图坐标系统中的源点位置和尺寸大小,通常用于在布局中调整视图的位置和大小。bounds定义了可视视图的内部尺寸大小。center通常用来在不改变视图的大小的前提下调整视图的位置。

关系


1.frame和bounds的size部分两者是紧密联系在一起的,所以改变改变其中任一一个,都会更新两者的size。值得注意的是frame的size并不总是等于bounds的size的。

2.实际上frame时一个派生属性。当使用frame来布局时,需要特别注意的是:如果视图的transform不等于CGAffineTransformIdentity时,frame可能并不能正确反映出视图的位置,此时请用bounds和center代替。

猜想


1.在UIKit框架下,View不过是对Layer进行了封装,并接管了处理事件的能力。显示在屏幕上的依旧是Layer。

2.View的本身视图和本身图层共用一套坐标系(其实只有一个Layer坐标系,也不是共用了啦,亦可理解成共用),

3.视图中的frame,bounds,center只不过是图层中的frame,bounds,position

4.由于视图没有暴露出图层的anchorPoint,因而在不改变anchorPoint默认位置的前提下,center是frame的中点的才成立。

5.这也解释了为什么对View某些的操作和直接操作Layer的效果是一样的。


坐标系简析


子视图(图层)所在的坐标系,是由父视图(图层)的bounds所决定的。

center简析


1.视图的center与图层的position是同一坐标系下的同一个点。当操作视图的center时,实际上是改变位于视图下方CALayer的position,不能独立于图层之外改变视图的center。

2.anchorPoint和position的关系是不同坐标系下的同一个点。(关于anchorPoint和position的关系,我将于Layer篇再进行解读吧)

3.图层的anchorPoint默认位于图层的中点,此时图层的position位于图层的中点,因而视图的center是frame的中心点。

4.但是当anchorPoint不位于图层的中点时,此时图层的position不位于图层的中点,因而视图的center不是frame的中心点。

frame简析


1.视图的frame与图层的frame是同一坐标系统下的同一区域。当操作视图的frame时,实际上是改变位于视图下方CALayer的frame,不能独立于图层之外改变视图的frame

2.关于图层的frame,我将于Layer篇再进行解读吧

bounds简析


1.视图的bounds与图层的bounds是同一坐标系统下的同一区域。当操作视图的bounds时,实际上是改变位于视图下方CALayer的bounds,不能独立于图层之外改变视图的bounds

2.通过改变bounds.origin,可以改变其所决定的坐标系,所有依赖于此坐标系的子视图,其位置都会产生相应的移动,以适应旧坐标系到新坐标系过渡的需要。这也就是scroll实现的原理。

3.更深更具体,关于图层的bounds,我将于Layer篇再进行解读吧

未完待续(个人见解)

上一篇下一篇

猜你喜欢

热点阅读