2013-06-30 146 views
0

我想創建我的第一個iPhone應用程序。應用程序只是一個指向北方的箭頭。 我迄今加入箭頭的圖像,並且創建通過下面的代碼動畫:動畫移動圖像

 
- (void)setDirection:(float)degree { 
     float rad = M_PI * (float)degree/180.0; 
     [UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:10]; 
     [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
     //[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
     DirectionArrow.transform = CGAffineTransformMakeRotation(rad); 
     [UIView commitAnimations]; 
    } 
 

我的問題是沿箭頭「移動」它旋轉之前,每次我調用該方法。我已經嘗試了多種東西來將旋轉角度居中,但沒有任何運氣。

我希望箭頭(圖像)圍繞自己的軸旋轉。

+0

你能否澄清 '箭頭 「移動」'?在應用旋轉之前,您是否有任何代碼來定位箭頭? –

+0

這裏有一些解決方案:http://stackoverflow.com/questions/7232460/cgaffinetransformmakerotation-around-external-point –

+0

我剛剛添加了一個圖像直接到UIView。我沒有任何其他代碼,然後旋轉代碼。 它很難解釋它是如何移動的。當我調用旋轉按鈕時,圖像的位置會在開始旋轉之前發生變化。 – user2536967

回答

4

這是因爲您的視圖圍繞着(0, 0)(視圖的左上角)旋轉。相反,您想要圍繞箭頭的中心旋轉。

要做到這一點,你必須建立一個轉換,執行以下操作:

  1. 平移箭頭,使得它的中心是在(0, 0)
  2. 旋轉rad度的視圖。
  3. 將箭頭翻譯回((1)的逆變換)。

它應該是這樣的(高達翻轉T1和T3的):

CGFloat h = view.bounds.size.height; 
CGFloat w = view.bounds.size.width; 
CGAffineTransform t1 = CGAffineTransformMakeTranslation(-w/2, -h/2); 
CGAffineTransform t2 = CGAffineTransformMakeRotation(rad); 
CGAffineTransform t3 = CGAffineTransformMakeTranslation(w/2, h/2); 
CGAffineTransform t = CGAffineTransformConcat(CGAffineTransformConcat(t3, t2), t1); 
DirectionArrow.transform = t; 
+3

換句話說,您需要更改圍繞其旋轉箭頭的錨點。 +1 –

+0

感謝您的幫助。 爲了確保我正確理解這一點,我需要將圖像放入單獨的視圖中,將箭頭移動到位置0,0,並旋轉並將箭頭向後移動? 它仍然有可能看到旋轉動畫? – user2536967

+0

你可以把它放在一個單獨的視圖中,或者只是轉換到箭頭的中心(如果它當前不在視圖的中心,則必須爲翻譯設置不同的'(x,y)'值。關於動畫,你會看到正確旋轉的箭頭,因爲基本上這是繞着'(x,y)'的另一個錨點旋轉而不是原來的'(0,0)'。 – StatusReport