Ich habe UIPinchGestureRecognizer zu meiner scene.view hinzugefügt, um meinen Inhalt zu skalieren. Ich skaliere den Elternknoten, in dem sich alle sichtbaren Inhalte befinden. Aber ich habe ein Problem mit Skalierungspunkt. Die Sache ist Knoten Skala von der unteren linken Ecke. Es ist definitiv nicht das, was ich will. Muss ich viel Code schreiben, um von dem Punkt aus skalieren zu können, an dem es klemmt? Könnten Sie bitte ein paar Hinweise geben, welchen Weg Sie verfolgen sollten?
Ich habe an dem gleichen Problem gearbeitet und meine Lösung wird unten gezeigt. Nicht sicher, ob es der beste Weg ist, es zu tun, aber bisher scheint es zu funktionieren. Ich verwende diesen Code, um einen SKNode mit mehreren SKSpriteNode-Kindern zu vergrößern und zu verkleinern. Die Kinder bewegen und skalieren mit dem SKNode wie gewünscht. Der Ankerpunkt für die Skalierung ist die Position der Pinch-Geste. Der übergeordnete SKScene und andere SKNodes in der Szene sind nicht betroffen. Alle Arbeiten finden während recognizer.state == UIGestureRecognizerStateChanged statt.
%Vor%Das Folgende sind Hilfsfunktionen, die oben verwendet wurden. Sie stammen aus dem Ray Wenderlich Buch über Sprite Kit.
%Vor%Ich habe die Neunfünfzehn-Lösung für Swift and Pinch Gestures übersetzt. Ich habe ein paar Tage damit verbracht, das alleine zu machen. Vielen Dank für die Obj-C-Post von Ninefifteen! Hier ist die Swift-Version, die anscheinend für mich funktioniert.
%Vor%Kann nicht zoomen Ich weiß nicht warum, aber das Hauptproblem sind diese SKT_INLINE. Ich habe sie gegoogelt und nichts über sie gefunden ... Das Problem ist, wenn ich sie in meinem Projekt kopiere / einfüge, sagt mir der Compiler, dass ich ein ";" direkt nach ihnen. Ich frage mich, ob das der Grund ist, dass ich zoomen kann.
In Swift 4 fügt my SKScene
der Ansicht den UIPinchGestureRecognizer
hinzu, übergibt jedoch die Behandlung der Pinch-Geste an einen seiner SKNode
-Kinder, der in der init()
der Szene erstellt wurde, aus bestimmten Gründen nicht relevant hier. Wie auch immer, dies ist die Antwort von neunzehnzehn aus der Perspektive dessen, was er _mySkNode
nennt. Es enthält auch einen kleinen Code, um den Zoom zu begrenzen und verwendet nicht die Komfortfunktionen, die am Ende seines Beitrags aufgeführt sind. Der @objc
-Teil der Deklaration erlaubt die Verwendung der Funktion in #selector()
.
Hier ist was in meinem SKScene
:
Und das ist der relevante Abschnitt in meinem SKNode:
%Vor%Tags und Links pinchzoom sprite-kit scaling sknode