Ich möchte einen CGPoint auf dem Bildschirm je nach Winkel drehen und die Rotation ist an einem anderen Punkt verankert. Fragte sich, was ist der effizienteste Weg, dies zu tun?Was ist der beste Weg, um einen CGPoint auf einem Gitter zu drehen?
Antwort
Sie können auch das verwenden:
rotatedPoint = CGPointApplyAffineTransform(initialPoint, CGAffineTransformMakeRotation(angle));
EDIT: Rotation um benutzerdefinierten Punkt auszuführen, müssen Sie tun, wie Adam in seiner Antwort beschrieben. Mit CGAffineTransform muss es in etwa so aussehen:
behandelt diese Drehung an einem anderen Punkt auf sich selbst? – Frank
hat nur ein paar Änderungen an diesem Code vorgenommen, CGAffineTransformMakeTransation ist CGAffineTransformMakeTranslation, kleiner Tippfehler. und für den Winkel muss es Radiant sein, aber anders als das funktioniert thx! – Frank
Verwenden Sie eine 2D rotation matrix. Wenn Sie einen Punkt gegen den Uhrzeigersinn um den Ursprung um einen Winkel von angle
drehen möchten, dann würden Sie dies tun:
CGPoint RotatePointAboutOrigin(CGPoint point, float angle)
{
float s = sinf(angle);
float c = cosf(angle);
return CGPointMake(c * point.x - s * point.y, s * point.x + c * point.y);
}
Wenn Sie zu einem anderen Punkt als den Ursprung drehen wollen, müssen Sie zuerst subtrahieren haben das Rotationszentrum von Ihrem Punkt, drehen Sie es mit der oben genannten, und fügen Sie dann zurück in der Mitte der Rotation (das heißt Konjugation in Matrix-Theorie).
Adam, du hast mein Leben mit der Erklärung der Konjugation gerettet. Danke :) –
Verwenden Sie eine CGAffineTransform.
Sie können Core Animation auch für Sie tun lassen. Werfen Sie einen Blick auf Apples docs auf Schichtgeometrie und wandelt in der Core Animation Programming Guide
Alles was Sie tun müssen, ist die anchor der Schicht eingestellt und dann können Sie die Transformation mit so etwas wie dies gilt:
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation
animationWithKeyPath:@"transform.rotation.z"];
[rotationAnimation setFromValue:DegreesToNumber(0)];
[rotationAnimation setToValue:DegreesToNumber(360)];
DegreesToNumber wandelt Grad in Radiant um und gibt eine NSNumber-Darstellung zurück.
Ich bin mir nicht sicher, was Sie genau machen wollen, aber Core Animation ist oft eine gute Wahl für Visualisierungen.
Mit Vladimir’s answer, unten ist die Swift 3 Antwort:
let initialPoint = CGPoint(x: 100, y: 100) // the point you want to rotate
let translateTransform = CGAffineTransform(translationX: initialPoint.x, y: initialPoint.y)
let rotationTransform = CGAffineTransform(rotationAngle: angle)
let customRotation = (rotationTransform.concatenating(translateTransform.inverted())).concatenating(translateTransform)
rotatedPoint = initialPoint.applying(customRotation)
- 1. Was ist der beste Weg, um einen InputStream zu überwachen?
- 2. Was ist der beste Weg, um einen "Timer" zu implementieren?
- 3. Was ist der beste Weg, um einen Datenrahmen zu umgehen?
- 4. Was ist der beste Weg, um einen ByteArrayOutputStream zu schließen?
- 5. Was ist der beste Weg, um einen Stream um
- 6. Was ist der beste Weg, um einen Nutch Index aufzufrischen?
- 7. Was ist der beste Weg, um eine Animation zu fahren?
- 8. Was ist der beste Weg, um einen Index zu erstellen, um die schnellste Leseantwort zu erhalten?
- 9. Was ist der beste/kürzeste Weg, um einen Iterable zu einem Stream in Dart zu konvertieren?
- 10. Was ist der beste Weg, um eine Tabelle zu deduplizieren?
- 11. Was ist der beste Weg, um vorberechnete Daten zu implementieren?
- 12. Was ist der beste Weg, um mehrere Suchoptionen zu behandeln?
- 13. Was ist der beste Weg, um eine IllegalArgumentException zu fangen
- 14. Was ist der beste Weg, um mit OSGI zu beginnen?
- 15. Was ist der beste Weg, um eine Liste zu kopieren?
- 16. Was ist der beste Weg, um mehrere Aktionen zu behandeln?
- 17. Was ist der beste Weg, um Flags Enum zu vergleichen?
- 18. Was ist der beste Weg, um Wände in einem isometrischen Spiel zu implementieren und zu gestalten?
- 19. Android, Was ist der beste Weg, um AbstractThreadedSyncAdapter zu töten?
- 20. Was ist der beste Weg, um Code zu organisieren?
- 21. Was ist der beste Weg, um einen ‚Laden‘ -Anzeige auf einem WPF-Steuerelement
- 22. Was ist der beste Weg, um eine Enumeration zu erhöhen?
- 23. Was ist der beste Weg zu
- 24. Was ist der beste Weg, um von einem RectF zu einem Rect in Android zu konvertieren?
- 25. Was ist der beste Weg, um ein Verzeichnis zu leeren?
- 26. bash - Was ist der beste Weg, um Ergebnisse zu zählen?
- 27. Was ist der beste Weg, um ähnliche Strings zu bearbeiten?
- 28. Was ist der beste Weg, um eine Eigenschaft zu deklarieren?
- 29. Was ist der beste Weg, um in C++ zu casten?
- 30. Was ist der beste Weg, um jQuery zu lernen?
Meinten Sie Sie etwas um einen Punkt drehen möchten? – Jasarien
Ja offensichtlich von einem Ausgangspunkt. – Frank