Привязка с помощью CALayers - PullRequest
       64

Привязка с помощью CALayers

2 голосов
/ 28 августа 2011

Я перемещаю несколько слоев CALay, используя метод -mouseDragged, и теперь я хотел бы «привязать» их, когда они достаточно близко (или когда они немного перекрываются). Каждый слой не является "квадратом": я рисую разные полигоны.

Я думал, что способ сделать это:

  1. получить положение перемещаемого слоя;
  2. получить перекрывающиеся слои или слои, которые находятся рядом с перемещаемым слоем;
  3. На каждой стороне многоугольника, в которой (2) верно, мне нужно проверить максимальное расстояние (под прямым углом к ​​стороне слоя) между стороной движущегося слоя и стороной слоя, которая является «рядом» (это отрицательное значение, когда слои перекрываются).
  4. соответственно переместите слой.

Я не знаю, правильный ли это подход. Первое, что приходит мне в голову:

  • Что произойдет, если я смогу «защелкнуться» более чем с одной стороны?

И, даже если я попытаюсь таким образом, я понятия не имею, что делать с (2) и (3).

Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 06 сентября 2011

Это не легко. Поскольку CALayers не являются векторной графикой, вам приходится иметь дело с любой возможной формой (например, изображением дракона).

Правильные столкновения сложны. Вместо этого попробуйте нажать клавишу мыши, чтобы проверить положение мыши / прикосновения к форме, к которой вы хотите привязаться.

Вы можете сделать это, проверив прозрачность каждого из возможных привязывающих слоев в местоположении мыши. См. этот вопрос для получения информации о том, как это сделать.

Более сложные, но лучшие результаты:

Используйте двумерный физический движок, например Бурундук или Box2D, для обнаружения столкновений.

...