2012-10-20 49 views
2

假設我有一個小的UIView作爲較大UIView的子/子視圖,並且該子可以通過一些CGAffineTransforms移動。父母如何知道該視圖的真正「中心」在其座標系內?我曾嘗試使用convertPoint例程與任何由child.center返回,但它不工作......是'中心'完全假在這種情況下,或者我只是使用錯誤的方法?CGAffineTransform獲取UIView的中心

+0

我不知道在CGAffineTransforms中如何表現中心行爲,但你不應該使用convertPoint,因爲中心被認爲是「在其超級視圖的座標系統內」。 (或者,也許我誤解了你自己的意思。) –

+0

請舉例說明你正在使用的代碼和你看到的值。 「不工作」對任何人都沒有幫助。 – jrturton

回答

4

編輯:

做了一些測試後,我注意到以下幾點:

UIViews沒有一個anchorPoint財產,但他們有一箇中心性質。該中心屬性始終將變換後適當的計算,除了平移轉換,爲你必須做到以下幾點:

CGPoint realCenter = CGPointMake(myView.center.x + myView.frame.origin.x, ...); 

至於CALayer S,他們確實有一個anchorPoint財產,但他們缺乏一箇中心物業。所以,你想要做的是通過對位置屬性,anchorPoint屬性和圖層的轉換進行計算來手動計算中心。

我無法提供任何代碼,因爲我不確定您使用的是哪種方法,但是要將其包裝起來,您必須以任何方式推出自己的中心計算器。


請看圖片下方仔細(斯坦福iPhone開發課程的PPT提供):

enter image description here

施加一個45°後:

應用任何旋轉之前自轉:

enter image description here

結論:

通知老中心如何爲(300,225)和新中心,以及不是新!一樣的。如果你正在做的一切正確,你的中心應該是一樣的。如果你想要計算另一個觀點,那麼你自己就必須這樣做。

請注意框架是如何從(200,100,200,250)變爲(140,65,320,320)的。這正是UIKit的魔力。

+0

但是,如果變換是具有不同anchorPoint的翻譯或比例尺,則視圖的中心將會不同(在屏幕上)。 –

+0

@Jonathan。是的,它應該像上面的插圖一樣正確計算。如果你有不同的結果,請告訴我 – Mazyod

+0

@Jonathan。順便說一句,你使用'CALayer's?我不熟悉'UIView有錨點。 – Mazyod