深入坐标系、

2016-08-26  本文已影响14人  玉米地里种玉米

视图与坐标有关的四个属性:

frame  bounds  center  transform

frame用于记录在 设备空间  层面上的实际位置和大小

bounds和center 用于记录视图在用户空间中的位置和大小

需要将用户空间(看不见的空间)展现到 设备空间(看的见的设备屏幕),中间的映射规则就有transform来决定,如果没有变形,两个空间保持一致,但是有了变形,那么 就会把用户空间中的结果  改变大小或角度或位置 之后再映射到 设备空间

1.深入坐标系

 frame

a、什么是frame

类型:CGRect结构体类型

作用:该视图左顶点在父坐标系中的位置,以及在父视图中占据的宽和高

b、直接修改了frame属性时,其他属性如何变化

bounds:YES

center:  YES

transform:NO

c、什么时候用frame

当把一个视图添加到父视图中,需要定位时,一定要设置frame属性

2 bounds

a、什么是bounds

类型:CGRect类型的结构体

作用:描述了该视图自己的坐标系顶点的起始值,以及该视图自身的大小

b、直接修改了bounds属性,其他属性如何变化?

frame:YES

center:NO

transform:NO

c、什么时候使用bounds属性?

当需要定位一个视图,读取父视图的大小才能定这个位置时,就需要读取父视图的bounds属性来获取大小

当需要修改子视图的位置时,可以通过修改视图的bounds中的坐标系起点值,从而使子视图的位置发生偏移,实现移动的效果

3 center

a、什么是center属性?

类型:CGPoint结构体类型

作用:描述的是该视图的中心点,在父视图坐标系中的位置

b、直接修改了center属性,其他属性会如何变化?

frame:YES

bounds:NO

transform:NO

c、什么时候用center?

需要修改视图的位置时,也就是想实现位移,通过修改center实现

4 transform

a、什么是transform属性?

类型:CGAffineTransform结构体

作用:描述该视图的变形 状态

b、直接修改了transform属性,其他属性如何变化

frame:YES

bounds:NO

center:NO

c、什么时候用transform

需要变形时(位移、缩放、旋转),通过修改transform属性

总结:与坐标有关的数据,一共分了两个层面,一个叫做用户空间,一个叫做设备空间,center和bounds用于记录用户空间中视图的大小和位置,但是用户空间中的视图映射到设备空间时,不一定按照记录的center和bounds来表现,中间的映射规则就记录在transform中,所以,没有变形以前,用户空间的数据什么样,表现到设备空间就是什么样,所以frame和bounds的改变是协调一致的,此时,可以认为时表里如一,如果有了变形,就意味着设定了一套映射规则,与,用户空间的数据经过变化后,到了设备空间就会表现出不同的大小,此时可以认为是表里不一。transfom记录的就是两个空间之间的映射规则

结论:

定位选frame

大小选bounds

位移选center

变形选transform

上一篇下一篇

猜你喜欢

热点阅读