Debugging Physik ist eine Sache. Es ist wahrscheinlich nichts, worüber iOS-Nutzer viel nachgedacht haben, da sie im Allgemeinen sehr einfache Dinge mit UIKit Dynamics gemacht haben. Das ist eine Schande, denn es ist einer der besten Aspekte der letzten iOS-Versionen und bietet eine wirklich unterhaltsame Möglichkeit, um überzeugende Benutzererlebnisse zu schaffen.
So ... wie Physik zu debuggen? Ein Weg ist, sich geistig vorzustellen, was vor sich geht, und dann das mit dem, was vor sich geht, zu korrelieren und die Dissonanz zwischen dem Imaginären und dem Realen zu finden und dann das Problem durch eine Mischung von Eliminierungsprozessen, mentalen oder realen Versuchen zu lösen & Fehler und Abzug, bis das Problem festgestellt und gelöst ist. Eine andere besteht darin, eine visuelle Darstellung aller geschaffenen und interagierenden Darstellungen zu haben, die ausreichend Feedback liefern, um die Art und Ausmaße von Elementen, ihren Beziehungen und Vorfällen/Ereignissen schneller zu bestimmen und Probleme mit der tatsächlichen Sicht zu lösen.
Zu diesem Zweck wurden seit ihrer Einführung verschiedene visuelle Debugger und Builder für Physiksimulationen erstellt.
Leider hat iOS keinen solchen bildschirmbasierten Editor oder "Szeneneditor" für UIKit Dynamics, und was für diese Art des visuellen Debuggens in Sprite Kit und Scene Kit verfügbar ist, ist bestenfalls rudimentär.
Es gibt jedoch CALayers, die in allen UIKit Views vorhanden sind, in denen CAShapeLayers manuell erstellt und gezeichnet werden können, um alle physikalischen Elemente, ihre Grenzen und ihre Anker und Beziehungen genau darzustellen.
CAShapeLayers sind ein "Container" für CGPaths und können verschiedene Farben für Outline und Fill und mehr als ein CGPath-Element in einem einzelnen CAShapeLayer haben.
Und die große Rob zu zitieren:.
„Wenn Sie eine CAShapeLayer als Schicht auf eine Ansicht hinzufügen, Sie müssen nicht zu sich jede Zeichnung Code implementieren Sie einfach die CAShapeLayer hinzufügen und Du bist fertig, du kannst zum Beispiel später den Pfad ändern, und er wird automatisch von für dich neu gezeichnet. CAShapeLayer bringt dich aus den Unkräutern zum Schreiben deiner eigenen drawRect- oder drawLayer-Routinen. "
Wenn Sie eine enorme Anzahl interagierender Elemente haben und sie debuggen wollen, könnte CAShapeLayer die Performance-Probleme ins Spiel kommen, an welcher Stelle Sie shouldRasterize verwenden können jeweils in eine Bitmap zu konvertieren, und eine deutliche Leistungssteigerung erhalten, wenn Grenzen treffen, die durch die "dynamischen" Fähigkeiten von CAShapeLayers entstehen.
Um CASHapeLayers darzustellen, gibt es einen einfachen Prozess für die Erzeugung von gestrichelten Linien, indem Sie einfach Eigenschaften festlegen. Hier finden Sie die Grundlagen zum Einrichten der Eigenschaften eines CAShapeLayer und die Verwendung eines Arrays zum Erstellen einer gestrichelten 5-5-5-Kontur mit einem Blockstrich, Breite 3, keine Füllung.
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
[shapeLayer setBounds:self.bounds];
[shapeLayer setPosition:self.center];
[shapeLayer setFillColor:[[UIColor clearColor] CGColor]];
[shapeLayer setStrokeColor:[[UIColor blackColor] CGColor]];
[shapeLayer setLineWidth:3.0f];
[shapeLayer setLineJoin:kCALineJoinRound];
[shapeLayer setLineDashPattern:
[NSArray arrayWithObjects:[NSNumber numberWithInt:10],
[NSNumber numberWithInt:5],nil]];
Kein Zeichnungsexperte, aber die Dokumentation schlägt vor, dass der Pfad ein Polygon sein sollte.Ihr Code fügt einen Bogen hinzu, schließt den Pfad jedoch nicht. Vielleicht sollten Sie '[maskPath closePath]' aufrufen, um einen geschlossenen Pfad zu erstellen, der den Unterschied ausmachen kann? –
Es wird automatisch geschlossen – WMios
Für das Ausfüllen von 'drawRect' wird dies der Fall sein. Bist du dir sicher für deinen 'collisionBoundingPath'? Wo sagt es in den Dokumenten, dass es den Weg schließt? –