2011-10-08 106 views
0

我在根據觸摸位置定位圖像時遇到問題,但僅限於圓形。根據觸摸位置在屏幕上放置圖像,將圖像的位置限制爲一個圓形

它適用於大多數情況,但如果角度(從觸摸位置到所需位置)小於0,則會將圖像定位在圓圈的錯誤一側。

也許這是我做錯了一些數學。

總之,這裏的代碼:

float newHeight, newWidth, centerPointX, centerPointY; 
newHeight = -(invertedY.y - (view.frame.origin.y+view.frame.size.height/2)); 
newWidth = -(invertedY.x - (view.frame.origin.x+view.frame.size.width/2)); 

float tangent = newHeight/newWidth; 
float calculatedAngle = atanf(tangent); 
float s, c, d, fX, fY; 

d = view.frame.size.width/2+30; 

    if (calculatedAngle < 0) { 
     s = sinf(calculatedAngle) * d; 
     c = cosf(calculatedAngle) * d; 
    } else { 
     s = -sinf(calculatedAngle) * d; 
     c = -cosf(calculatedAngle) * d; 
    } 

    fX = view.center.x + c; 
    fY = view.center.y + s; 

    [delegate setPoint:CGPointMake(fX, fY)]; 

    NSLog(@"angle = %.2f", calculatedAngle); 

任何幫助表示讚賞。

回答

0

我認爲將位置限制爲圓的最佳方法是從中心到觸摸位置計算矢量。計算矢量長度,然後將其除以該長度,以便將其標準化。然後將歸一化矢量乘以圓的半徑,最後將此矢量添加到中心以計算新位置。

CGPoint touch, center; 
CGPoint vector = CGPointMake(touch.x-center.x, touch.y-center.y); 

float length = sqrtf(vector.x*vector.x + vector.y*vector.y); 
// Normalize and multiply by radius (r) 
vector.x = r * vector.x/length; 
vector.y = r * vector.y/length; 

[delegate setPoint:CGPointMake(center.x + vector.x, center.y + vector.y)]; 
+0

它完美的工作,謝謝。 –

相關問題