一、Frame
Frame是UIView在其父视图坐标系中的位置和大小。它是一个CGRect类型的结构体,包含了视图的原点坐标和宽高信息。当我们改变一个视图的frame时,实际上是在修改它在父视图中的位置和大小,因此会影响到它的位置和显示。Frame的原点是相对于父视图的坐标系的,因此当父视图发生移动或变换时,子视图的frame也会相应地发生改变。二、Bounds
Bounds是UIView在其自身坐标系中的位置和大小。它也是一个CGRect类型的结构体,通常情况下,它的原点都是(0, 0)。当我们改变一个视图的bounds时,实际上是在修改它自身坐标系的大小,而不会影响到视图在父视图中的位置和显示。Bounds的宽高是相对于视图自身的,因此当视图发生缩放时,它的子视图的bounds不会发生改变。三、区别总结
Frame用于描述视图在其父视图坐标系中的位置和大小,可以改变视图的位置和大小,其原点是相对于父视图的坐标系的。Bounds用于描述视图在其自身坐标系中的位置和大小,用于改变视图的坐标系大小,其原点通常为(0, 0)。延伸阅读
坐标系转换
在iOS开发中,由于UIView的Frame和Bounds属性描述了视图在不同坐标系中的位置和大小,所以涉及到坐标系转换是很常见的。
UIView提供了多种方法用于坐标系转换,如convertPoint:toView:
和convertPoint:fromView:
用于点的转换,convertRect:toView:
和convertRect:fromView:
用于矩形区域的转换等。
坐标系转换在处理视图嵌套、触摸事件处理等场景中非常有用,可以帮助我们准确地获取和设置视图在不同坐标系中的位置和大小。