Wie dreht man ein Objekt um einen beliebigen Punkt?

9

Ich möchte ein UILabel um einen beliebigen Punkt herum drehen, nicht auf einer geraden Linie. Das ist mein Code. Der letzte Punkt ist perfekt, aber er verläuft durch eine gerade Linie zwischen dem Anfangs- und dem Endpunkt.

%Vor%     
Tibidabo 28.05.2011, 08:22
quelle

4 Antworten

8

Ich habe beschlossen, meine Lösung als Antwort zu veröffentlichen. Es funktioniert gut, akzeptieren Sie nicht die Kurvenanimationen der alten Lösungen (UIViewAnimationCurveEaseOut), aber ich kann das sortieren.

%Vor%     
Tibidabo 29.05.2011, 01:55
quelle
10

Sie sollten Ihr eigenes anchorPoint

Es ist sehr viel Overkill, eine Keyframe-Animation für das zu verwenden, was eine Änderung des Ankerpunkts ist .

Der Ankerpunkt ist der Punkt, an dem alle Transformationen angewendet werden. Der Standard-Ankerpunkt ist das Zentrum. Wenn Sie den Ankerpunkt auf (0,0) bewegen, können Sie stattdessen die Ebene von der untersten Ecke aus drehen. Wenn Sie den Ankerpunkt auf etwas setzen, bei dem x oder y außerhalb des Bereichs von 0.0 - 1.0 liegt, können Sie die Ebene um einen Punkt drehen, der außerhalb ihrer Grenzen liegt.

Lesen Sie den Abschnitt Layer Geometry and Transforms im Core Animation Programming Guide für weitere Informationen. Es geht im Detail mit Bildern durch, damit Sie es verstehen.

EDIT: Eine Sache, an die man sich erinnern sollte

Der Rahmen Ihrer Ebene (der auch der Rahmen Ihrer Ansicht ist) wird anhand der Position, der Grenzen und des Ankerpunkts berechnet. Wenn Sie den Ankerpunkt ändern, ändert sich die Position Ihrer Ansicht auf dem Bildschirm. Sie können dem entgegenwirken, indem Sie den Rahmen nach dem Ändern des Ankerpunkts neu setzen (dadurch wird die Position für Sie festgelegt). Andernfalls können Sie die Position auf den Punkt einstellen, an dem Sie sich drehen. Die Dokumentation (oben verlinkt) erwähnt dies ebenfalls.

Angewandt auf den Code

Der Punkt, den Sie "transportPoint" genannt haben, sollte aktualisiert werden, um den Unterschied zwischen dem Rotationspunkt und der unteren linken Ecke des Etiketts dividiert durch die Breite und Höhe zu berechnen.

%Vor%

Ich habe den Rotationspunkt auch zu einem Argument für Ihre Methode gemacht. Der vollständige aktualisierte Code ist unten:

%Vor%     
David Rönnqvist 18.05.2012 10:46
quelle
2

CAKeyframeAnimation ist das richtige Tool für dieser Beruf. Die meisten UIKit-Animationen befinden sich zwischen Start- und Endpunkten. Die Mittelpunkte werden nicht berücksichtigt. Mit CAKeyframeAnimation können Sie diese Mittelpunkte definieren, um eine nichtlineare Animation bereitzustellen. Sie müssen den entsprechenden Bezier-Pfad für Ihre Animation angeben. Sie sollten sich this example ansehen und die in der Apple-Dokumentation zur Verfügung gestellt, um zu sehen, wie es funktioniert.

    
Deepak Danduprolu 28.05.2011 08:40
quelle
-1

übersetzen, rotieren um den Mittelpunkt, übersetzen zurück.

    
ddyer 28.05.2011 08:34
quelle