Это действительно больше похоже на математический вопрос. Если вы хотите просто предотвратить выход подвида из круга, вам нужно вставить некоторую логику везде, где вы выполняете код перемещения.
Сначала найдите середину круга. Предполагая, что представление круга является обрезанным UIView, найдите центральное представление, взяв
CGPoint center;
center.x = view.frame.origin.x + view.frame.size.width/2;
center.y = view.frame.origin.y + view.frame.size.height/2;
Затем вам нужно рассчитать это расстояние между касанием и центром круга.
CGPoint touch = //location of the touch point
CGFloat distance = sqrt( pow(touch.x-center.x,2)+pow(touch.y-center.y,2) )
если расстояние меньше 300, вы перемещаете подвид как обычно
if (distance < 300) {
//do your thing
}
если вы хотите, чтобы представление перестало двигаться там, где вы вышли из круга, а затем привязались к тому месту, где вы снова вошли, вы можете остановиться здесь. Если вы хотите двигаться в направлении вашего пальца, даже когда он находится вне поля зрения, я рекомендую сформировать вектор и умножить его на 300.
CGPoint newPosition;
newPosition.x = touch.x / distance * 300;
newPosition.y = touch.y / distance * 300;
Это даст вам положение на краю круга, которое ближе всего к точке касания.
person
Andrew Hoos
schedule
12.10.2013