UIView: Wie man Transformationen "zurücksetzt". CGAffineTransformScale funktioniert nicht wie erwartet

8

Ich denke, meine Frage kann zusammengefasst werden, wie die Transformation einer Ansicht gespeichert und zurückgesetzt wird. Aber dann könnte vielleicht meine Situation zu erklären helfen.

Wenn ich die unten stehenden Transformationen nacheinander auf eine Ansicht anwende (etwa wenn ich diesen Code einem Schalter oder einer Schaltfläche hinzufüge). Ich bekomme genau das Ergebnis, das ich erwarten würde: Die Skala wechselt zwischen: einer Ansicht, die .55 mal so groß ist wie die Originalansicht, und der Ansicht im Originalmaßstab. Funktioniert auch, um Unteransichten von someView zu skalieren, so wie ich es möchte. Ad infinitum. Perfekt.

%Vor%

Das Problem ist, dass ich diesen Code (oder Ähnliches) verwenden möchte, um eine Unteransicht von self.view zu skalieren, wenn ein iOS-Gerät in Querformat geht, um die Unteransicht an den Querformat-Bildschirm anzupassen Porträt). Es funktioniert fast, aber aus irgendeinem Grund, anstatt runde Werte für den Rahmen der zu skalierenden Ansicht auszugeben (wie es bei einem Test mit einer Taste geschieht, um die Transformationen aufzurufen), werden zunehmend seltsame Werte erzeugt. Schließlich, nach etwa 4 Umdrehungen, fliegt die Unteransicht vom Bildschirm weg. Ich vermute, dass es mit der sich ändernden Form von self.view zu tun hat, aber wenn ich dann den Rahmen von self.view aufzeichne, ist seine Form sehr vorhersehbar.

Nebenbei: Ich zentriere die Ansicht mithilfe der flexiblen Ränder von autoresizingMask, ohne Auto-Layout zu verwenden. vielleicht sollte ich die Ansicht mit einer anderen Art von Berechnung zentrieren?

Danke fürs Lesen!

    
Mrwolfy 08.01.2013, 13:31
quelle

2 Antworten

5

(1) Stellen Sie sicher, dass Sie nach dem Anwenden von Transformationen keine Framedaten festlegen oder abrufen. Dies wird nicht unterstützt und führt zu unvorhersehbaren Ergebnissen.

(2) Schalte die Ränder der Autorisierungsmaske ab und zentriere dich wie folgt:

%Vor%

(Achten Sie darauf, die Zentrierung anzuwenden, während die Ansicht in voller Größe ist. d. h. VOR der Transformation, wenn es die Größenänderungstransformation ist, NACH der Transformation, wenn es sich um die Identitätstransformation handelt)

    
foundry 08.01.2013, 14:41
quelle
29

Ich habe das gemacht und es hat perfekt funktioniert.

%Vor%     
nithinreddy 13.11.2014 14:38
quelle