iOS中frame和Bounds之间的区别
frame
frame是每個(gè)view必備的屬性,代表的是當(dāng)前視圖的位置和大小,沒(méi)有設(shè)置他,當(dāng)前視圖是看不到的。位置需要有參照物才能確定,數(shù)學(xué)中我們用坐標(biāo)系來(lái)確定坐標(biāo)系中的某個(gè)點(diǎn)的位置,iOS中有他特有的坐標(biāo)系,如下圖:
iOS坐標(biāo)系
??在iOS坐標(biāo)系中以左上角為坐標(biāo)原點(diǎn),往右為X正方向,往下是Y正方向
??frame中的位置是以父視圖的坐標(biāo)系為標(biāo)準(zhǔn)來(lái)確定當(dāng)前視圖的位置
??同樣的默認(rèn)情況下,本視圖的左上角就是子視圖的坐標(biāo)原點(diǎn)
??更改frame中位置,則當(dāng)前視圖的位置會(huì)發(fā)生改變
??更改frame的大小,則當(dāng)前視圖以當(dāng)前視圖的左上角為基準(zhǔn)的進(jìn)行大小的修改
bounds
bounds是每個(gè)View都有的屬性,這個(gè)屬性我們一般不進(jìn)行設(shè)置,他同樣代表位置和大小;每個(gè)視圖都有自己的坐標(biāo)系,且這個(gè)坐標(biāo)系默認(rèn)以自身的左上角為坐標(biāo)原點(diǎn),所有子視圖以這個(gè)坐標(biāo)系的原點(diǎn)為基準(zhǔn)點(diǎn)。bounds的位置代表的是子視圖看待當(dāng)前視圖左上角的位置;bounds的大小代表當(dāng)前視圖的大小;
??更改bounds中的位置對(duì)于當(dāng)前視圖沒(méi)有影響,相當(dāng)于更改了當(dāng)前視圖的坐標(biāo)系,對(duì)于子視圖來(lái)說(shuō)當(dāng)前視圖的左上角已經(jīng)不再是(0,0), 而是改變后的坐標(biāo),坐標(biāo)系改了,那么所有子視圖的位置也會(huì)跟著改變
??更改bounds的大小,bounds的大小代表當(dāng)前視圖的長(zhǎng)和寬,修改長(zhǎng)寬后,中心點(diǎn)繼續(xù)保持不變, 長(zhǎng)寬進(jìn)行改變;通過(guò)bounds修改長(zhǎng)寬看起來(lái)就像是以中心點(diǎn)為基準(zhǔn)點(diǎn)對(duì)長(zhǎng)寬兩邊同時(shí)進(jìn)行縮放;
frame和bounds
有如下圖:
iOS bounds
View A是最頂層視圖, 因此他的信息如下:frame?origin:0, 0 size :550 * 400
bounds?origin:0, 0 size 550 * 400
因?yàn)槭荲iew A是頂層視圖,所以其實(shí)相當(dāng)于覆蓋在框架上,因此位置從父視圖的(0, 0)開(kāi)始,大小為550*400默認(rèn)情況下,本視圖的坐標(biāo)系是沒(méi)有發(fā)生改變的即當(dāng)前視圖(view A)的左上角就是所有子視圖的原點(diǎn),大小就是當(dāng)前視圖的大小.
View B是View A的子視圖,因此他的信息如下:?frame?origin:200, 100 size :200 * 250
bounds?origin:0, 0 size :200 * 250
因?yàn)閂iew B是View A的子視圖,所以View B的frame位置需要以View A的左上角為參照,因此位置為(200, 100), 大小為200*250bounds在默認(rèn)情況下本視圖的坐標(biāo)系是沒(méi)有發(fā)生改變的即當(dāng)前視圖(view B)的左上角就是當(dāng)前視圖所有子視圖的原點(diǎn).
上面這種是普通的情況,也就是沒(méi)有更改bounds的時(shí)候,下面我們來(lái)看更改bounds的例子, 如下圖:
iOS bounds
在上一個(gè)例子的基礎(chǔ)上,我們更改了view A的bounds后,view B看待View A的左上角就已經(jīng)發(fā)生改變了;這個(gè)時(shí)候我們看待View A的左上角就不是坐標(biāo)原點(diǎn)了,而是我們通過(guò)bounds設(shè)置后的坐標(biāo),如圖也就是(0, 100);在View B的frame沒(méi)有保存不變的基礎(chǔ)上,我們View B的位置向上移動(dòng)了100
在第一例的基礎(chǔ)上,更改了bounds中X后,效果圖如下:
iOS bounds 3
總結(jié)
1、frame不管對(duì)于位置還是大小,改變的都是自己本身
2、frame的位置是以父視圖的坐標(biāo)系為參照,從而確定當(dāng)前視圖在父視圖中的位置
3、frame的大小改變時(shí),當(dāng)前視圖的左上角位置不會(huì)發(fā)生改變,只是大小發(fā)生改變
1、bounds改變位置時(shí),改變的是子視圖的位置,自身沒(méi)有影響;其實(shí)就是改變了本身的坐標(biāo)系原點(diǎn),默認(rèn)本身坐標(biāo)系的原點(diǎn)是左上角
2、bounds的大小改變時(shí),當(dāng)前視圖的中心點(diǎn)不會(huì)發(fā)生改變,當(dāng)前視圖的大小發(fā)生改變,看起來(lái)效果就像縮放一樣。
轉(zhuǎn)自:http://www.lanou3g.com/lozx/2582.html
總結(jié)
以上是生活随笔為你收集整理的iOS中frame和Bounds之间的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java复制一个对象_Java中对象的复
- 下一篇: 数据库选型经验汇总