UIKit Dynamic Behaviour Pan mit Anhang Kollisionsverhalten nicht fortsetzen?

9

Wie kann ich eine Kollisionserkennung in der Gruppe von UIDynamicItem ?

durchführen?

Hintergrund : Ich erstelle 20 Etiketten zufällig aus einer Reihe von Farben / Strings (dieser Teil ist für die Frage nicht essentiell) und füge sie dann mit einer zufälligen Mittelposition zur Hauptansicht hinzu . Von dort füge ich UIDynamicBehavior s wie folgt hinzu:

1) UIDynamicItemBehavior , damit die Etiketten nicht rotieren 2) UISnapBehavior , um die Beschriftungen in die Mitte der Ansicht zu bringen (Ich möchte eine schwerkraftähnliche Bewegung, aber das ist nicht die Frage) 3) UICollisionBehavior für alle Labels, für die collisionMode .Items ist.

Dies funktioniert im "anfänglichen" Setup ... alle Beschriftungen erscheinen an zufälligen Stellen und schnappen dann schnell in der Mitte zusammen, mit der richtigen Kollisionserkennung. Meine Frage ist jedoch, wie kann ich dann ein Label (durch eine Schwenkgeste) bewegen, so dass die Kollisionserkennung fortgesetzt wird?

Ich habe ein UIPanGestureRecognizer auf jedem der Labels eingerichtet, und wenn sie anfangen zu ziehen, erstelle ich ein UIAttachmentBehavior und benutze das, um sie beim Ziehen zu verschieben. Dies "funktioniert" in dem Sinne, dass sich das Etikett bewegt, aber es gleitet nur über alle anderen Etiketten, ohne dass eine Kollisionserkennung stattfindet. Wie kann ich diese Kollisionserkennung erreichen, so dass, wenn ich anfange, ein Etikett zu anderen zu ziehen, sie gerade so weit aus dem Weg gehen, dass es keine Überlappung gibt (und diese dann zurück zu ihren Positionen basierend auf dem Schwerpunktpunkt springen) ? Muss ich UIAttachmentBehavior an alle anderen Labels anhängen, die ich für jeden Pan gezogen habe?

Ich habe ein Testprojekt für das Problem erstellt, mit dem ich konfrontiert bin. Es zeigt, was ich gerade beschrieben habe:

github-Testprojekt

Danke!

    
BHendricks 29.09.2016, 12:41
quelle

1 Antwort

0

Nun, nachdem ich mehrere Monate über dieses Thema nachgedacht hatte, dachte ich schließlich über eine Lösung nach, also dachte ich, ich würde sie später zum Nutzen aller veröffentlichen.

Dies ist mit einer einfachen SpriteKit-Szene sehr einfach zu bewerkstelligen. Ich erstelle nur ein kleines SKScene , füge SKLabelNode s in diese Szene mit dem gewünschten Text / Farbe / Größe ein und füge dann SKFieldNode mit radialGravityField hinzu. Von dort aus können die Eigenschaften der Physik mit der Eigenschaft physicsBody jedes Knotens spielbar gemacht werden, und ich kann genau das erreichen, was ich wollte, indem ich in die touchesBegan -Methode der Szene stecke und den entsprechenden Knoten mit der Physik-Engine passend verschiebe Kollisionen und Prellen für mich.

    
BHendricks 18.12.2016, 03:24
quelle