2014-10-14 3 views
0

Я хочу переместить UIView внутри круга. UIView перемещает каждую точку внутри круга, но не касается пограничной линии круга. Я вычисляю расстояние между кругом и UIView.Как я могу перемещать UIView прикосновением, сохраняя его внутри круга?

var distance = sqrt(
    pow((touchPoint.x - selfCenter.x), 2) + pow((touchPoint.y - selfCenter.y), 2) 
) 

И ограничивает движение UIView в направлении из круга

if distance <= radius { 
    theUIView.center = touchPoint 
} 

Проблема начинается здесь, если сенсорный съехать из круге UIView застряли на границе, внутри круга. Вот почему я пытаюсь написать else оператор, насколько я пробовал это.

if distance <= radius { 
    theUIView.center = touchPoint 
} else { 
    theUIView.center = CGPointMake(
     touchPoint.x/distance * radius, 
     touchPoint.y/distance * radius 
    ) 
} 

Вопрос в том, как я могу держать UIView внутри круга и продолжать двигаться, если касания продолжают двигаться. Подсказка была бы замечательной.

Здесь есть похожие вопросы - like this - но не помогло.

ответ

1

Ваш другой случай выглядит неправильно. Если вы хотите, чтобы «проект» точку вне круга на границу круга, то он должен быть

if distance <= radius { 
    theUIView.center = touchPoint 
} else { 
    theUIView.center = CGPointMake(
     selfCenter.x + (touchPoint.x - selfCenter.x)/distance * radius, 
     selfCenter.y + (touchPoint.y - selfCenter.y)/distance * radius 
    ) 
} 

Примечание: Расстояние может быть легко вычислен с помощью hypot() function:

var distance = hypot(touchPoint.x - selfCenter.x, touchPoint.y - selfCenter.y) 
+0

Мартин благодарит вас за ответ и ярлык для вычисления расстояния. веселит. – mohacs

Смежные вопросы