一、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:
用于矩形區域的轉換等。
坐標系轉換在處理視圖嵌套、觸摸事件處理等場景中非常有用,可以幫助我們準確地獲取和設置視圖在不同坐標系中的位置和大小。