2013-03-04 66 views
0

我有以下視圖,其中我使用在向上平移姿勢或向下的方向,以正或負旋轉它一個矩形:旋轉使用UIPanGestureRecognizer

enter image description here

我想知道,是有一個數學公式可以準確地轉換旋轉的數量,因此時間是正確的,以便讓用戶在旋轉時將手指放在視圖上?例如,如果平移翻譯回到1,旋轉它的適當數量是多少?

回答

1

有您需要提供給一個有意義的答案几個細節:

  1. 你旋轉視圖圍繞其中心(默認),或者是有一個錨點?
  2. 由於視圖是旋轉的,當觸摸在超視圖中嚴格垂直移動時,隨着視圖旋轉遠離定義泛的垂直線,預期的行爲是什麼?
  3. 您是否有使用平移手勢而不是旋轉手勢的原因,或者甚至只是直接觸摸跟蹤?它似乎創造了比解決問題更多的問題。

爲了簡單起見,我將假定視圖是圍繞其中心旋轉的,我將使用從視圖右側開始的平移作爲示例,旋轉不超過± 90°。這裏有兩個選項:

  1. 運動向上和向下線性地轉換爲旋轉角度,即,一個給定的距離的盤旋轉視圖相同的量,無論在哪裏鍋啓動。在這種情況下,您需要確定平底鍋的頂部和底部極限。他們可能是超級觀點的界限。無論如何,您要將沿Y方向行進的距離轉換爲介於-1和1之間的值,其中-1表示下限,1表示上限。像2 *(dy/superview.bounds.size.height - 0.5)。將其乘以π/ 2(math.h中的M_PI_2)以從[-1,1]範圍縮放至[-π/ 2,π/ 2]範圍,並且您已經獲得了從視圖在手勢開始處的旋轉。

  2. 視圖追蹤觸摸,以便其右邊始終「指向」觸摸。在這種情況下,平移不是非常有用,因爲你只需要在超視圖中的觸摸位置,而不是行駛的距離。計算dx和dy作爲從視圖中心到觸摸位置的x和y座標的差異。然後計算atan2(dy,dx),並獲得視圖的絕對旋轉角度。

我希望這會讓你走上正確的軌道。

+0

謝謝。需要一點時間來消化! – 2013-03-05 02:43:32