詳解UIView的frame、bounds和center屬性

1、概要
翻開ios官方開發(fā)文檔,赫然發(fā)現(xiàn)上面對這三個屬性的解釋如下:

  • frame:描述當(dāng)前視圖在其父視圖中的位置和大小。
  • bounds:描述當(dāng)前視圖在其自身坐標(biāo)系統(tǒng)中的位置和大小。
  • center:描述當(dāng)前視圖的中心點在其父視圖中的位置。

是不是有點迷糊?好吧,別急,讓我們先說說iOS的坐標(biāo)系統(tǒng)。

2、ios坐標(biāo)系統(tǒng)
ios以左上角為坐標(biāo)原點(0,0),以原點向右側(cè)為X軸正方向,原點下側(cè)為Y軸正方向

ios采用CGPoint來表示點在坐標(biāo)系上X、Y位置。我們可以通過CGPointMake(x,y)來創(chuàng)建一個坐標(biāo)點:CGPoint point = CGPointMake(80,40)

同時,ios采用CGSize來表示視圖的寬度和高度,即視圖的大小。我們可以通過CGSizeMake(width,height)來創(chuàng)建一個矩形的大小,如CGSize size = CGSizeMake(144,72)將創(chuàng)建一個寬度為144,高度為72的矩形大小。

而CGRect則是結(jié)合了CGPoint和CGSize,用來表示矩形的位置和大小。它的origin表示矩形右上角所在位置(CGPoint),size表示矩形的大小(CGSize)。

3、frame、bounds和center的區(qū)別與聯(lián)系

回到frame和bounds屬性,通過前面的描述不難發(fā)現(xiàn),這兩個屬性都是用來描述視圖的大小(CGSize)和位置(CGPoint)的,兩者都用CGRect表示。不同的是,frame描述的是在其父視圖中的CGRect,而bounds描述的是在其自身視圖中的CGRect,也就是說,兩者所在的坐標(biāo)系是不同的。View B是View A的子視圖,那么,View B的frame屬性為origin(200,100),size(200,250),而View B的bounds屬性為origin(0,0),size(200,250)。

center屬性則用CGPoint表示矩形中心點在其父視圖中的位置,如圖3中View B的center屬性為(300,200)。

frame、bounds和center三個屬性是相互關(guān)聯(lián)、相互影響的,其中一個屬性發(fā)生變化,其他屬性也會跟著變化。

4、frame、bounds和center的使用場景

一般來說,bounds屬性比較少用,通常使用frame來設(shè)置視圖的大小和位置,使用center來改變(移動)視圖的位置(也可用frame來改變位置)。另外,對視圖進(jìn)行旋轉(zhuǎn)、縮放也都是相對于center進(jìn)行操作的。
From: http://unmi.cc/ios-bounds-frame

frame和bounds是UIView中的兩個屬性(property)。
frame指的是:該view在父view坐標(biāo)系統(tǒng)中的位置和大小。(參照點是父親的坐標(biāo)系統(tǒng))
bounds指的是:該view在本身坐標(biāo)系統(tǒng)中 的位置和大小。(參照點是本身坐標(biāo)系統(tǒng))

-(CGRect)frame{
  return CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);
}
-(CGRect)bounds{
  return CGRectMake(0,0,self.frame.size.width,self.frame.size.height);
}
1.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容