1、概要
翻開(kāi)ios官方開(kāi)發(fā)文檔岗钩,赫然發(fā)現(xiàn)上面對(duì)這三個(gè)屬性的解釋如下:
- frame:描述當(dāng)前視圖在其父視圖中的位置和大小纽窟。
- bounds:描述當(dāng)前視圖在其自身坐標(biāo)系統(tǒng)中的位置和大小。
- center:描述當(dāng)前視圖的中心點(diǎn)在其父視圖中的位置兼吓。
是不是有點(diǎn)迷糊臂港?好吧,別急视搏,讓我們先說(shuō)說(shuō)iOS的坐標(biāo)系統(tǒng)审孽。
2、ios坐標(biāo)系統(tǒng)
ios以左上角為坐標(biāo)原點(diǎn)(0,0)浑娜,以原點(diǎn)向右側(cè)為X軸正方向瓷胧,原點(diǎn)下側(cè)為Y軸正方向
ios采用CGPoint來(lái)表示點(diǎn)在坐標(biāo)系上X、Y位置棚愤。我們可以通過(guò)CGPointMake(x,y)來(lái)創(chuàng)建一個(gè)坐標(biāo)點(diǎn):CGPoint point = CGPointMake(80,40)
同時(shí),ios采用CGSize來(lái)表示視圖的寬度和高度杂数,即視圖的大小宛畦。我們可以通過(guò)CGSizeMake(width,height)來(lái)創(chuàng)建一個(gè)矩形的大小,如CGSize size = CGSizeMake(144,72)將創(chuàng)建一個(gè)寬度為144揍移,高度為72的矩形大小次和。
而CGRect則是結(jié)合了CGPoint和CGSize,用來(lái)表示矩形的位置和大小那伐。它的origin表示矩形右上角所在位置(CGPoint)踏施,size表示矩形的大小(CGSize)。
3罕邀、frame畅形、bounds和center的區(qū)別與聯(lián)系
回到frame和bounds屬性,通過(guò)前面的描述不難發(fā)現(xiàn)诉探,這兩個(gè)屬性都是用來(lái)描述視圖的大小(CGSize)和位置(CGPoint)的日熬,兩者都用CGRect表示。不同的是肾胯,frame描述的是在其父視圖中的CGRect竖席,而bounds描述的是在其自身視圖中的CGRect,也就是說(shuō)敬肚,兩者所在的坐標(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表示矩形中心點(diǎn)在其父視圖中的位置牲览,如圖3中View B的center屬性為(300,200)恶守。
frame第献、bounds和center三個(gè)屬性是相互關(guān)聯(lián)、相互影響的兔港,其中一個(gè)屬性發(fā)生變化庸毫,其他屬性也會(huì)跟著變化。
4衫樊、frame飒赃、bounds和center的使用場(chǎng)景
一般來(lái)說(shuō),bounds屬性比較少用科侈,通常使用frame來(lái)設(shè)置視圖的大小和位置载佳,使用center來(lái)改變(移動(dòng))視圖的位置(也可用frame來(lái)改變位置)。另外臀栈,對(duì)視圖進(jìn)行旋轉(zhuǎn)蔫慧、縮放也都是相對(duì)于center進(jìn)行操作的。
From: http://unmi.cc/ios-bounds-frame
frame和bounds是UIView中的兩個(gè)屬性(property)权薯。
frame指的是:該view在父view坐標(biāo)系統(tǒng)中的位置和大小姑躲。(參照點(diǎn)是父親的坐標(biāo)系統(tǒng))
bounds指的是:該view在本身坐標(biāo)系統(tǒng)中 的位置和大小。(參照點(diǎn)是本身坐標(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);
}