2

我試圖從UIPanGestureRecognizer獲取vector,關於Portrait Orientation中屏幕的座標軸。我知道我可以獲得速度,這是戰鬥的一半,但我理想的情況是喜歡獲得有關屏幕垂直軸的角度(指南針角度或弧度)的方法。例如,從左下到右上的拖動角度爲45度,從上到下爲180度,或從下到上爲0(或360度)。從UIPanGestureRecognizer獲取矢量

這可能嗎?它沒有方向屬性,文檔中翻譯的解釋有點令人困惑。我需要手動創建一箇中心點(關於我的視圖的中心),並將Pan Touch的開始/結束點與該點進行比較?我有點不確定所需的數學。

在此先感謝!^_^

回答

5

如果你能得到與速度:

float x = velocity.x; 
float y = velocity.y; 

double angle = atan2(y, x) * 180.0f/3.14159f; 
if (angle < 0) angle += 360.0f; 
+0

你能解釋一下如何:

CGPoint velocity = [recognizer velocityInView:self.view] 

那麼你可以相對於X軸與計算角度這段代碼有效嗎?我不太確定它在做什麼。 – Luke

+1

看看:http://www.cplusplus.com/reference/cmath/atan2/ – Loris1634

+0

看來,這段代碼的作品,但0度是水平軸(所以如果我從左向右滑動,我得到0度)。我可以改變這個,從上到下是0度嗎? – Luke

0
CGPoint startLocation = [sender locationInView:self.view]; 
if (sender.state == UIGestureRecognizerStateBegan) { 
    startLocation = [sender locationInView:self.view]; 
} 
else if (sender.state == UIGestureRecognizerStateEnded) { 
    CGPoint stopLocation = [sender locationInView:self.view]; 
    CGFloat dx = stopLocation.x - startLocation.x; 
    CGFloat dy = stopLocation.y - startLocation.y; 

    double angle = atan2(dy, dx) * 180.0f/M_PI; 
    if (angle < 0) angle += 360.0f; 
    NSLog(@"angle: %f",angle); 
}