frame與bounds的關係與區別

2021-06-20 23:00:00 字數 1431 閱讀 5707

在設定uiview的位置及尺寸時會使用到frame屬性。但是,容易引起混淆的是另外乙個決定uiview尺寸的bounds屬性。實際上,當我們向bounds實行中設定新的cgrect是,uiview的尺寸也會改變(位置沒變),與設定frame屬性的效果相同。bounds屬性到底是什麼?該如何使用?不多說了,進入主題吧。歸納如下:

frame屬性是以父元素(superview)的本地座標係為基準的位置和尺寸。

bounds屬性是以自身的本地座標係為基準的位置及尺寸。

1.舉個例子,當我在將父元素(uiview)追加到uiwindow中,然後再將子元素(uiview)追加到父元素中。假設父元素在uiwindow的cgrect為(100,15,160120);子元素在父元素中的cgrect為(0,80,120,40)。此時,父元素的frame.origin屬於uiwindow的本地座標系,值為(100,15);子元素的frame.origin屬於父元素的本地座標系,值為(0,80)。當然,bounds.origin都是以自身座標係為基準,值都為(0,0)。

結論:frame用於設定uiview的位置及尺寸 ,bounds用於繪製自己座標系內的其他子元素或者用於判斷使用者觸控自身座標系的位置等。

2.在座標(50,15)處有乙個uiview,然後在uiview(mainview,下文中用它作為例項物件)中追加乙個相同大小的子元素uilabel(label,同上),此處的問題是下面標籤label的frame設定正確是哪個?

(1)label.frame = mainview.frame;

(2)label.frame = mainview.bounds;

正確答案是2,frame屬性屬於父元素的本地座標系範疇,lable.frame設定的值,從mainview本地座標系來考慮應該是(0,0,mainview.frame.size.width,mainview.frame.size.height);但是mainview.frame為(50,15,mainview.frame.size.height),由此label.frame值應該是以mainview本地座標係為基準的mainview.bounds,即(0,0,mainview.frame.size.width,mainview.frame.size.height)

frame與bounds的區別

原來你m,frame.size和bounds.size不總是一樣的 在uiviewcontroller的 void willanimaterotationtointe ceorientation uiinte ceorientation tointe ceorientation duration n...

frame與bounds的區別比較

翻譯文件上的 bounds是指這個view在它自己座標系的座標和大小 而frame指的是這個view在它superview的座標系的座標和大小 區別主要在座標系這一塊。很明顯乙個是自己為原點的座標系,乙個是以螢幕為原點的座標系。絕對座標。相對座標。比如螢幕旋轉的時候就要以相對來重繪。frame 如果...

frame與bounds的區別比較

翻譯文件上的 bounds是指這個view在它自己座標系的座標和大小 而frame指的是這個view在它superview的座標系的座標和大小 區別主要在座標系這一塊。很明顯乙個是自己為原點的座標系,乙個是以螢幕為原點的座標系。絕對座標。相對座標。比如螢幕旋轉的時候就要以相對來重繪。frame 如果...