视图与坐标有关的四个属性:
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
网友评论