Gibt es die ‚Skala‘ von einem CATransform3D
-
10-10-2019 - |
Frage
Ich erstelle einen iPad-App und mag die Benutzer mit der aktuellen Größe einer Ansicht aktualisieren. I verwendet, dies zu tun, indem die Skala eines CGAffineTransform der Berechnung und die xScale durch die Breite (der zugehörigen Ansicht) und die yScale durch die Höhe multipliziert. Ich möchte dies weiterhin tun, aber ich bin nicht mehr 2d Transformationen zu tun, und ich bin sicher, was Gleichung, die die Skaleninformationen von CATransform3D verwenden zu extrahieren.
Können Sie mir helfen?
Lösung
Um den aktuellen Maßstab der Schicht erhalten Sie führen Sie einfach eine valueForKeyPath:
auf der Schicht:
CGFloat currentScale = [[layer valueForKeyPath: @"transform.scale"] floatValue];
Andere Tasten können in Äpfel Core Animation Programming Guide
Andere Tipps
Ich bin nicht vertraut mit dem API aber CATransform3D
sieht aus wie eine normale 4x4 Transformationsmatrix für 3D-Transformationen zu tun.
Unter der Annahme, dass es nicht mehr als eine Kombination aus Skalierung, Drehung und Translation steht, kann die Skalierungsfaktoren durch Berechnen der Größen der entweder die Zeilen oder Spalten von der linken oberen 3x3 extrahiert werden, je nachdem, ob CATransform3D
ist Zeilen- oder Spaltenhaupt jeweils .
Zum Beispiel, wenn es zeilenweise, ist der Maßstab in der x-Richtung die Quadratwurzel aus (m11 m11 *) + (m12 m12 *) + (m13 * m13). Die Y- und Z-Skalen ähnlich die Größen der zweiten und dritten Reihe sein würde.
Aus der Dokumentation