1、布局
- 1、UIView有三个比较重要的布局属性:frame、bounds、center。CALayer对应叫做frame、bounds、position。为了能清楚区分,图层用来"position",视图用了“center”,但是他们都代表同样的值。
- 2、frame代表了"图层"的外部坐标(也就是在“父图层上占据的空间”)
- 3、bounds是内部坐标,{0,0}通常是图层的左上角
- 4、center和position都代表了相对于父图层anchorPoint所在的位置
-
5、视图的frame、bounds、center属性仅仅是存取方法,当操纵视图的frame时,实际上是在改变位于视图下方CALayer的frame
-
6、对于“视图”或者“图层”来说,frame并不是一个非常清晰的属性,它其实是一个虚拟属性,是根据bounds,position和transform计算而来,所以当其中任何一个值发生改变,frame都会变化,相反,改变frame的值同样会影响到他们当中的值
-
7、当对图层做变换的时候,比如旋转或者缩放,frame实际上代表了“覆盖在图层旋转”之后的整个轴对齐的矩形区域,也就是说frame的宽高可能和bounds的宽高不在一致了
2、锚点
- 1、上面提到过,视图的center属性和图层的position属性都指定了anchorPoint相对于父图层的位置。图层的anchorPoint通过position来控制它的frame的位置,你可以认为anchorPoint是用来移动图层的把柄。
- 2、默认来说,anchorPoint位于图层的中点,所以图层将会以这个点为中心放置。anchorPoint属性并没有被UIView接口暴露出来,这也是视图的position属性被叫做“center”的原因。
- 3、但是图层的anchorPoint可以被移动,比如你可以把它置于图层frame的左上角,于是图层的内容将会向右下角的position方向移动,而不是居中了
-
4、所以改变anchorPoint时,虽然“位置”改变了,但是“center”没有改变
-
5、和第二章提到的contentRect 和 contentsCenter属性类似,anchorPoint用单位坐标来描述,也就是图层的相对坐标,图层左上角是{0,0},右下角是{1,1},因此默认坐标是{0.5,0.5}。anchorPoint可以通过制定x和y值小于0或者大于1,使它放置在图层范围之外
网友评论