Kann ich CGAffineTransformMakeRotation verwenden, um eine Ansicht um mehr als 360 Grad zu drehen?
Schreibe ich eine iPhone-app, und ich habe ein Bild, das ich'ld gerne DRALL nach außen.
Derzeit mein code sieht wie folgt aus (eingewickelt in ein beginAnimations/commitAnimations block):
scale = CGAffineTransformScale(CGAffineTransformIdentity, 5.0f, 5.0f);
swirl = CGAffineTransformRotate(scale, M_PI);
[player setTransform:swirl];
[player setAlpha:0.0f];
Aber ich finde, dass wenn ich versuche, ändern Sie den Winkel der Drehung um, sagen wir, 4*M_PI, es überhaupt nicht bewegt. Ist es möglich, eine 720 Drehung mit CGAffineTransformRotate, oder muss ich wechseln zu einer anderen Technologie?
Wenn ich zu einem anderen wechseln, Technologie, würde dir empfehlen mit einem anderen thread (oder timer), um die animation selber, oder würde OpenGL die bessere route zu gehen?
Dank,
Blake.
InformationsquelleAutor der Frage bwinton | 2009-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine Ansicht drehen, um eine Anzahl von Bogenmaß, unabhängig davon, ob es ist weniger als eine volle umdrehung oder ein Vielfaches einer vollen umdrehung, ohne split die rotation in Stücke. Als Beispiel wird der folgende code-spin-eine Ansicht, die einmal pro Sekunde, für eine angegebene Anzahl von Sekunden. Sie können leicht ändern, es zu drehen ein Blick durch eine bestimmte Anzahl von umdrehungen, oder durch eine Zahl von Bogenmaß.
InformationsquelleAutor der Antwort mahboudz
Können Sie, aber Sie müssen teilen Sie Ihre animation in ein halb-Kreis Rotationen. Ich ein Beispiel geben, das in Reaktion auf diese Fragemit einem sich wiederholenden CABasicAnimation auf die Schicht unterhalb der Ansicht. So empfehle ich es, mache ich mit diesen halb-umdrehungen als Teile einer CAKeyframeAnimation wäre wahrscheinlich der bessere Weg, um Struktur, da würde die animation flüssiger läuft (es gibt eine leichte abstimmungsprobleme zwischen halb-Rotationen in meinem Beispiel), und Sie konnte eine nette Beschleunigung /Verzögerung am Anfang und Ende.
InformationsquelleAutor der Antwort Brad Larson
Antwort auf den Titel: ja, CGAffineTransform drehen kann, mehr als 360 Grad Prima.
Antwort auf Frage: ja, aber Sie kann nicht animieren, weil es nichts zu animieren.
Denken Sie daran, dass die affine transformation ist eine matrixund dass eine rotation matrix enthält die Sinus-und Cosinus-Nummern vorausberechnete. Es ist, als wenn Sie sagte:
Nun, lasst uns einige Beispielwerte für die
cos
undsin
:cos(0π)
= 1sin(0π)
= 0cos(2π)
= 1sin(2π)
= 0cos(4π)
= 1sin(4π)
= 0Erinnern, der matrix nicht enthalten, die Winkel -- enthält nur die Cosinus-und Sinus -. Und diese Werte ändern sich nicht von einem vielfachen von einem Kreis zum anderen. Deshalb gibt es nichts zu animieren.
(Beachten Sie, dass Rechner.app gibt falsche Ergebnisse für cos(xn) und sin(xn). Versuchen Sie, Grapher, calcoder Google.)
Müssen Sie teilen Sie die animation in Bruchteilen einen Kreis. Der halb-Kreise Brad Larson vorgeschlagen, tun gut.
InformationsquelleAutor der Antwort Peter Hosey