Wie Ben sagte, müssen Sie mit der UIView's
Ebene arbeiten und a verwenden CATransform3D
, um die auszuführen layer's
rotation
. Der Trick, um die Perspektive zum Laufen zu bringen, wie hier beschrieben , besteht darin, direkt auf eine der Matrix cells
von CATransform3D
(m34) zuzugreifen. Matrixmathematik war noch nie mein Ding, daher kann ich nicht genau erklären, warum dies funktioniert, aber es funktioniert. Sie müssen diesen Wert für Ihre anfängliche Transformation auf einen negativen Bruch setzen und dann Ihre Ebenenrotationstransformationen darauf anwenden. Sie sollten auch in der Lage sein, Folgendes zu tun:
Ziel c
UIView *myView = [[self subviews] objectAtIndex:0];
CALayer *layer = myView.layer;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;
Swift 5.0
if let myView = self.subviews.first {
let layer = myView.layer
var rotationAndPerspectiveTransform = CATransform3DIdentity
rotationAndPerspectiveTransform.m34 = 1.0 / -500
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0 * .pi / 180.0, 0.0, 1.0, 0.0)
layer.transform = rotationAndPerspectiveTransform
}
Dadurch wird die Ebenentransformation für jede Drehung von Grund auf neu erstellt.
Ein vollständiges Beispiel hierfür (mit Code) finden Sie hier , wo ich eine berührungsbasierte Rotation und Skalierung für einige implementiert habe CALayers
, basierend auf einem Beispiel von Bill Dudney. Die neueste Version des Programms ganz unten auf der Seite implementiert diese Art der perspektivischen Operation. Der Code sollte relativ einfach zu lesen sein.
Das sublayerTransform
, auf das Sie sich in Ihrer Antwort beziehen, ist eine Transformation, die auf die Unterschichten von Ihnen angewendet wird UIView's
CALayer
. Wenn Sie keine Unterschichten haben, machen Sie sich darüber keine Sorgen. Ich verwende die sublayerTransform in meinem Beispiel einfach, weil CALayers
in einer Ebene, die ich drehe, zwei enthalten sind .