Расположите изображение на экране в соответствии с местоположением касания, ограничьте местоположение изображения кружком - PullRequest
0 голосов
/ 08 октября 2011

У меня проблема с позиционированием изображения в соответствии с местоположением касаний, однако оно ограничено кругом.

Это работает по большей части, но с учетом угла (от местоположения касаний до желаемого местоположения)меньше 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);

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 08 октября 2011

Я думаю, что лучший способ ограничить местоположение кругом - это вычислить вектор от центра к местоположению касания. Рассчитайте длину вектора, затем разделите ее на эту длину, чтобы она была нормализована. Затем умножьте нормализованный вектор на радиус окружности и, наконец, добавьте этот вектор в центр, чтобы вычислить новое местоположение.

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)];
...