iPad: Bewegen UIView mit animation, bewegen Sie ihn dann wieder
Ich habe den folgenden code in eine UIView-Unterklasse, die bewegen, werden Sie aus dem Bildschirm mit einer animation:
float currentX = xposition; //variables that store where the UIView is located
float currentY = yposition;
float targetX = -5.0f - self.width;
float targetY = -5.0f - self.height;
moveX = targetX - currentX; //stored as an instance variable so I can hang on to it and move it back
moveY = targetY - currentY;
[UIView beginAnimations:@"UIBase Hide" context:nil];
[UIView setAnimationDuration:duration];
self.transform = CGAffineTransformMakeTranslation(moveX,moveY);
[UIView commitAnimations];
Es funktioniert einfach toll. Ich habe mich verändert targetX/Y = 0 um zu sehen, ob es tatsächlich zu bewegen, um den angegebenen Punkt, und das tut es.
Das problem ist, wenn ich versuche, und verschieben Sie die Ansicht zurück, wo es ursprünglich war:
moveX = -moveX;
moveY = -moveY;
[UIView beginAnimations:@"UIBase Show" context:nil];
[UIView setAnimationDuration:duration];
self.transform = CGAffineTransformMakeTranslation(moveX,moveY);
[UIView commitAnimations];
Dadurch wird die UIView etwa 3x so weit wie es sollte. So wird die Ansicht in der Regel wird das aus der rechten Seite des Bildschirms (je nach dem wo es ist).
Gibt es etwas, mit dem CGAffineTransforMakeTranslation Funktion die ich kennen sollte? Ich habe die Dokumentation gelesen, und was ich sagen kann, es sollte das tun, was ich erwarte, es zu tun.
Jemand einen Vorschlag, wie man dieses Problem beheben? Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuordnung zu einer
transform
wird verursachen, dass die alten verschwinden. Um in die ursprüngliche position zurückkehren, zuweisen der Identität zu transformieren, um es.(Oder besser, ändern Sie einfach die
.frame
anstelle der änderung des.transform
.)UIView-Transformation ist nicht Additiv, schlage ich vor, um es wieder zu verschieben Sie stattdessen tun:
Die docs sagen (über die Aktualisierung der frame):
"Warnung: Wenn Sie diese Eigenschaft nicht die Einheitsmatrix, ist der Wert der frame-Eigenschaft ist nicht definiert und daher ignoriert werden sollten."