2016-09-29 4 views
9

Как обнаружить столкновение на катере UIDynamicItem?Пакет динамического поведения UIKit с приложением, не поддерживающим поведение при столкновении?

Фон: Я генерирую 20 меток случайным образом из набора цветов/строк (эта часть не является существенной для вопроса), а затем добавляет их к главному виду со случайным центральным положением. Оттуда, я добавляю UIDynamicBehavior с, следующим образом:

1) UIDynamicItemBehavior, чтобы остановить этикетки от вращающегося 2) UISnapBehavior привязать метки к центру зрения (я хочу гравитационное как движение, но опять же, это не этот вопрос) 3) UICollisionBehavior для всех этикеток, где collisionMode - .Items.

Это работает в «начальной» настройке ... все ярлыки появляются в случайных точках, а затем быстро объединяются в центре с надлежащим обнаружением столкновения. Однако мой вопрос заключается в том, как я могу перемещать ярлык (посредством жесты панорамы), чтобы обнаружение конфликтов продолжалось?

У меня есть установка UIPanGestureRecognizer на каждой из меток, и когда они начинают перетаскивание, я создаю UIAttachmentBehavior и использую это, чтобы переместить их при перетаскивании. Это «работает» в том смысле, что ярлык перемещается, но он просто скользит по всем другим ярлыкам без какого-либо обнаружения столкновения. Как я могу добиться этого обнаружения столкновений, так что, когда я начинаю перетаскивать одну метку по отношению к другим, они уходят с пути, достаточного для того, чтобы там не было перекрытия (а затем они привязывались к своим позициям на основе точки центра тяжести) ? Нужно ли прикреплять UIAttachmentBehavior ко всем другим ярлыкам к тому, которое я перетаскиваю для каждого кастрюли?

Я создал тестовый проект по этому вопросу я облицовочная, показывает, что я только что описал:

github test project

Спасибо!

ответ

0

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

Это очень легко выполнить с помощью простой сцены SpriteKit. Я просто создаю небольшой SKScene, добавьте SKLabelNode s в эту сцену с любым желаемым текстом/цветом/размером, а затем добавьте SKFieldNode с radialGravityField. Оттуда свойства физики можно воспроизводить с помощью свойства physicsBody каждого узла, и я могу выполнить именно то, что было необходимо, подключив метод сцены и надлежащим образом переместив соответствующий узел, при этом физический движок заботится о столкновениях и подпрыгивания для меня.

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