2011-11-10 75 views
3

,當我堅持的變換和對象的框架。當應用程序重新加載時,我只需要在新視圖上恢復幀和變換。你會認爲你可以簡單地設置框架並轉換爲保存的值,但你不能。這樣做會產生不希望的結果。如何恢復保存變換翻轉

http://iphonedevelopment.blogspot.com/2008/10/demystifying-cgaffinetransform.html

說:「當你申請成功轉換,訂單此事旋轉,然後翻譯會給你一個不同的結果,那麼翻譯,然後旋轉這可以咬你,如果你不小心。」

當我保存一個已轉換的變換時,我只有變換問題翻轉& ROTATED。我的保存值與應用於還原視圖的值相同。

實際結果:

當這樣做:

myNewView.frame = savedFrame

myNewView.transform = savedTransform

我的視圖將下移和向右(出來的地方) 。

有人能幫助我恢復正確的操作順序我的變換?

再次,我已經證實了我的保存和加載轉換數據是完美的,所以我知道它的操作問題的順序,我只是沒有足夠的智慧找出下一步做什麼:P

回答

4

要撤消保存的轉換,你需要逆轉換。請參閱您參考的頁面中的「回踩」標題。嘗試:

myNewView.transform = CGAffineTransformInvert(savedTransform); 

任意矩陣並不總是可逆的,但通常用仿射變換你是安全的。 Here是一些需要注意的特殊情況。

一般來說,矩陣求逆可能會導致舍入誤差,所以如果你需要反覆這樣做,你可能需要使用不同的方法。

編輯:

已經重新閱讀的問題,我懷疑是轉型的起源可能已經改變。當涉及旋轉時,圍繞不同原點旋轉將看起來像是意想不到的翻譯。從docs開始,原點或者是視圖的中心,或者是圖層的錨點。我建議在保存轉換時檢查這些屬性,並在恢復時查看它們是否有所不同。

+0

對不起,我對錯誤的問題給出了很好的答案!我會再看一次。 – Zaq

+2

就是這樣!因此,對於曾嘗試恢復位置和變換的人,您需要按以下順序進行恢復: myNewView.frame = mySavedFrame; myNewView.center = mySavedCenter; myNewView.transform = mySavedTransform; – spentak