bounds:自身左上角在自身坐标系中的坐标(左上角相对于自身(0,0)点的偏移量)
frame:自身左上角在父视图坐标系中的坐标(左上角相对于父View(0,0)点的偏移量)
bounds和frame都是自身左上角相对于坐标系原点的偏移,不同在于一个是相对于自身坐标系,一个是相对于父坐标系。
注意
1.修改bounds时不会影响自身相对屏幕的位置,会影响子视图的位置。子视图实际位置=父视图实际位置-父视图bounds坐标+子视图frame坐标
2.旋转之后view.frame变大,为其形状的外接的最小的矩形(与坐标系方向相同的矩形)。而 view.bounds 没有变化。
3.应用是模仿系统UIScrollView的实现
总结
frame不管对于位置还是大小,改变的都是自己本身。
frame的位置是以父视图的坐标系为参照,从而确定当前视图在父视图中的位置。
frame的大小改变时,当前视图的左上角位置不会发生改变,只是大小发生改变。
bounds改变位置时,改变的是子视图的位置,自身没有影响;其实就是改变了本身的坐标系原点,默认本身坐标系的原点是左上角。
bounds的大小改变时,当前视图的中心点不会发生改变,当前视图的大小发生改变,看起来效果就想缩放一样。
改变bounds位置其实是改了自身坐标系原点,原理是更改左上角在自身坐标系中的坐标
。例如bounds=(-20,-20)表示设置自身左上角在自身坐标系中的坐标是(-20,-20),那么自身坐标原点就右下方各下移20,再加上子view的frame.origin的值就是子view的实际位置。
网友评论