2010-04-17 128 views
2

我有這樣的看法,我在我的代碼一些其他的點使用類似如何動畫同時旋轉和縮放視圖?

myView.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
//The view was originally at 0 degrees. 

做一些旋轉變換它,我想擴大其動畫的看法,所以我做

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:1.0]; 
myViews.transform = CGAffineTransformMakeScale(2.0f, 2.0f); 
[UIView commitAnimations]; 

但是當我這樣做時,動畫是在視角爲0度時執行的,忽略了以前的轉換。它只是假設視圖還沒有在零度,所以,這個動畫縮放視圖並將其旋轉回0度(!!!! ?????)

這是一些錯誤還是我錯過了某些東西? 謝謝。

回答

3

與KennyTM討論後,我到達了最佳的解決方案,同時具有絕對的轉變......變焦方法

,我做的:

// notice that both transformations are absolute 
CGAffineTransform rotation = CGAffineTransformMakeRotation(degreesToRadian(viewAngle)); 
CGAffineTransform zoom = CGAffineTransformMakeScale(zoomFactor, zoomFactor); 
myView.transform = CGAffineTransformConcat(rotation, zoom); 

當我旋轉視圖時,我存儲viewAngle。

2

因爲.transform賦值並不意味着新的將連接到舊的。在新的變換中,只能指定200%縮放,但不能旋轉,因此視圖將返回到0 °。

試試這個:

myViews.transform = CGAffineTransformScale(myViews.transform, 2.0f, 2.0f); 
+0

謝謝,但這解決了旋轉問題,但造成了規模問題。問題是這樣的:我有4個放大因子用於這個視圖,比如0.66,1.0,1.5和2.0。這些是絕對值。如果我使用你的解決方案,將不可能返回到每個縮放因子.... – SpaceDog 2010-04-17 16:30:05

+0

@Mike:爲什麼你不能使用獨立的伊娃來存儲縮放因子? – kennytm 2010-04-17 16:32:50

+0

我的意思是這個:假設縮放因子是1.然後我使用你的解決方案,並去0.66。現在我想去2.使用絕對尺度,我只是把zoomFactor設置爲2,但現在縮放係數必須是3.03。現在回到0.66,我將不得不使它0.21。經過無數的變革,我現在不知道縮放係數是什麼。我將不得不保留所有應用轉換的歷史記錄以瞭解當前的縮放因子,只需查看ivar ....無法將轉換應用到視圖並使其永久保存?我的意思是,更新轉換矩陣? – SpaceDog 2010-04-17 16:38:36