2009-04-14 93 views
41

雖然在黑暗的夜晚,但我不明白爲什麼有兩個不同的矩形:框架和邊界。爲什麼在UIView中有框架矩形和邊界矩形?

就像我理解的那樣,一個單一的矩形本來就是爲了做所有事情而已。將視圖本身相對於另一個座標系定位,然後將其內容剪裁爲指定的大小。你還會用兩個矩形做什麼?他們如何與海誓山盟互動?

有沒有人有很好的解釋?來自蘋果公司的那位小朋友拿着水果對理解起來不是很好。

回答

82

這裏的的cheatsheet:

  • frame是其中視圖(相對於所述上海華),其中視圖被允許繪製(相對於本身)
  • bounds

一些更澄清:

如果您將視圖定位在其超級視圖中,則幾乎總是更改框架原點。

如果您正在剪裁UIView正在繪製的位置,則幾乎總是修改其邊界。

請注意,您被允許具有比框架更大的邊界。也就是說,你可以畫出你所在的地方。

+0

所以框架就像是一個相對於超視圖座標系統的起始座標,並且從該起點開始,邊界剪切將以相對於視圖座標系統的座標完成? – Thanks 2009-04-20 09:37:21

+0

我注意到邊界始終有0,0的起點。所以邊界總是從0開始。我是否正確? – 2011-06-20 08:39:39

5

框架在超視圖的座標系中,界限在視圖的座標系中。從我的角度來看,這兩者都是一種方便。框架似乎是兩個更有用,除非有一些情況下,我不知道子視圖可以有一個完全不同的座標系統(例如像素比例不同)超級視圖。

+0

有。如果您更改子視圖的transform屬性(例如通過設置其旋轉),其邊界將保持不變,但其座標系與superview的座標系不同。 – jdc 2013-03-22 16:25:28

2

我最近遇到了麻煩,並且做了一些實驗。邊界屬性限制了UIView可以繪製的位置,但不限制限制其子視圖。另一件事邊界控件是觸摸事件派發。據我所知,視圖不會收到超出範圍的觸摸事件。此外,父視圖邊界之外的任何子視圖也不會接收觸摸事件。在這些情況下,隨着子視圖大小和位置的變化,您必須非常認真地更新容器視圖的邊界。所有東西總是會畫好(因爲子視圖不會被父母的邊界所限制),但不會接收到觸摸。

(這確實應該是先前的帖子的回覆,但因爲我還不能回答,它被困在這兒了...)