1. Frame
每個視圖都有一個frame屬性,它是CGRect結構,它描述了視圖所在的矩形在其父視圖中的位置。
(螢幕坐标系預設的原點在左上角,x軸向右伸展,y軸向下伸展)
設定frame通常通過視圖的指定初始化器initWithFrame
下面來看個例子,該例子初始化了3個互相疊加的矩形區域
(Objective-C代碼)
(Swift代碼 iOS9)
運作結果:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuMzYzMTMlRmNwQmYiZDOhZjNjFTM1IGNmFjYldzNiljZfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
2. Bounds
Bounds也是CGRect結構,和Frame不同,它描述的是視圖自身的矩形區域,是相對于自身的坐标系而言的。
下面的例子建立了2個疊加的矩形視圖,子視圖為綠色較小的那個
運作結果:
下面的例子通過改變綠色子視圖的bounds将父視圖完全覆寫
下面的例子,紫色父視圖的原點進行少量偏移
運作結果:
3. Center
Center即視圖的中心點位置坐标
4. 關于主視窗和裝置螢幕
裝置螢幕(UIScreen.mainScreen())沒有frame, 但它有bounds。
主視窗沒有父視圖,但是它的frame可以設為螢幕的bounds。
5. 關于frame和bounds的差別
一言以蔽之,就是前者相對于父視圖,而後者相對于自身。
我們還是用圖檔來看一下吧,這樣更直覺
在視圖未旋轉的情況下,它們差不多,坐标稍有差別,如下圖:
而在視圖作了類似旋轉的transform之後,它們的坐标則有很大的差别了,見下圖: