UIView官方文檔翻譯(來源於網絡)

原文就不貼了,直接看原文鏈接吧:

http://unmi.cc/knowledges-on-uiview


特別標記下: frame, bounds和center屬性之間的關係

視圖對象使用frame, bounds和center屬性來跟蹤它的尺寸和位置:

frame屬性包含了frame矩形,指定了在父視圖座標系統中該視圖的尺寸和位置。

center屬性包含了在父視圖座標系統中的已知中心點。

bounds屬性包含了邊界矩形,指定了在視圖本地座標系統中視圖的尺寸。

主要使用center和frame屬性來控制當前視圖的幾何結構。例如,當在運行時構建你的視圖層次或者改變視圖的尺寸或者位置時你可以使用這些屬性。如果你只是要改變視圖的位置,那麼推薦使用center屬性。center屬性的值永遠是可用的,即使添加了放縮或者轉換因子到視圖的轉換矩陣當中。但是對於frame屬性卻不是,當視圖的轉換矩形不等於原始矩陣時它被當作時無效的。

在繪製的過程中主要使用bounds屬性。這個邊界矩陣在視圖的本地座標系統被解釋。這個矩形的默認原點是(0, 0),它的尺寸也適應frame矩形的尺寸。任何繪製在這個矩形當中的東西都是該視圖的可視內容的一部分。如果你改變了bounds矩形的原點,任何你繪製在新矩形的東西都會變成該視圖可視內容的一部分。即使你可以獨立的改變frame,bounds和center屬性,其中一個改變還是會影響到另外兩個屬性:

當你設置了frame屬性,bounds屬性的尺寸值也改變來適應frame矩形的新尺寸。center屬性也會改變爲新frame矩形的中心值。

當你設置了center屬性,frame的原點也會相應的改變。

當你設置了bounds屬性,frame屬性會改變以適應bounds矩形的新尺寸。

視圖的框架默認不會被它的父視圖框架裁剪。這樣的化,任何放置在父視圖外的子視圖都會被完整的解釋。你可以改變這種行爲,改變父視圖的clipsToBounds屬性就可以。不管子視圖是否在視覺上被裁剪,觸屏事件總是發生在目標視圖父視圖的bounds矩形。換句話說,如果觸摸位於父視圖外的那部分視圖,那麼該事件不會被髮送到該視圖。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章