iOS中frame和Bounds之间的区别
frame
frame是每個view必備的屬性,代表的是當前視圖的位置和大小,沒有設置他,當前視圖是看不到的。位置需要有參照物才能確定,數學中我們用坐標系來確定坐標系中的某個點的位置,iOS中有他特有的坐標系,如下圖:
iOS坐標系
??在iOS坐標系中以左上角為坐標原點,往右為X正方向,往下是Y正方向
??frame中的位置是以父視圖的坐標系為標準來確定當前視圖的位置
??同樣的默認情況下,本視圖的左上角就是子視圖的坐標原點
??更改frame中位置,則當前視圖的位置會發生改變
??更改frame的大小,則當前視圖以當前視圖的左上角為基準的進行大小的修改
bounds
bounds是每個View都有的屬性,這個屬性我們一般不進行設置,他同樣代表位置和大小;每個視圖都有自己的坐標系,且這個坐標系默認以自身的左上角為坐標原點,所有子視圖以這個坐標系的原點為基準點。bounds的位置代表的是子視圖看待當前視圖左上角的位置;bounds的大小代表當前視圖的大小;
??更改bounds中的位置對于當前視圖沒有影響,相當于更改了當前視圖的坐標系,對于子視圖來說當前視圖的左上角已經不再是(0,0), 而是改變后的坐標,坐標系改了,那么所有子視圖的位置也會跟著改變
??更改bounds的大小,bounds的大小代表當前視圖的長和寬,修改長寬后,中心點繼續保持不變, 長寬進行改變;通過bounds修改長寬看起來就像是以中心點為基準點對長寬兩邊同時進行縮放;
frame和bounds
有如下圖:
iOS bounds
View A是最頂層視圖, 因此他的信息如下:frame?origin:0, 0 size :550 * 400
bounds?origin:0, 0 size 550 * 400
因為是View A是頂層視圖,所以其實相當于覆蓋在框架上,因此位置從父視圖的(0, 0)開始,大小為550*400默認情況下,本視圖的坐標系是沒有發生改變的即當前視圖(view A)的左上角就是所有子視圖的原點,大小就是當前視圖的大小.
View B是View A的子視圖,因此他的信息如下:?frame?origin:200, 100 size :200 * 250
bounds?origin:0, 0 size :200 * 250
因為View B是View A的子視圖,所以View B的frame位置需要以View A的左上角為參照,因此位置為(200, 100), 大小為200*250bounds在默認情況下本視圖的坐標系是沒有發生改變的即當前視圖(view B)的左上角就是當前視圖所有子視圖的原點.
上面這種是普通的情況,也就是沒有更改bounds的時候,下面我們來看更改bounds的例子, 如下圖:
iOS bounds
在上一個例子的基礎上,我們更改了view A的bounds后,view B看待View A的左上角就已經發生改變了;這個時候我們看待View A的左上角就不是坐標原點了,而是我們通過bounds設置后的坐標,如圖也就是(0, 100);在View B的frame沒有保存不變的基礎上,我們View B的位置向上移動了100
在第一例的基礎上,更改了bounds中X后,效果圖如下:
iOS bounds 3
總結
1、frame不管對于位置還是大小,改變的都是自己本身
2、frame的位置是以父視圖的坐標系為參照,從而確定當前視圖在父視圖中的位置
3、frame的大小改變時,當前視圖的左上角位置不會發生改變,只是大小發生改變
1、bounds改變位置時,改變的是子視圖的位置,自身沒有影響;其實就是改變了本身的坐標系原點,默認本身坐標系的原點是左上角
2、bounds的大小改變時,當前視圖的中心點不會發生改變,當前視圖的大小發生改變,看起來效果就像縮放一樣。
轉自:http://www.lanou3g.com/lozx/2582.html
總結
以上是生活随笔為你收集整理的iOS中frame和Bounds之间的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java复制一个对象_Java中对象的复
- 下一篇: java 上传文件注意事项