Jak powiedział Ben, będziesz musiał pracować z UIView's
warstwą, używając CATransform3D
do wykonania layer's
rotation
. Sztuką dostać perspektywiczny działa, jak opisano tutaj , ma bezpośredni dostęp do jednego z matrycą cells
o CATransform3D
(M34). Matematyka matematyczna nigdy nie była moją rzeczą, więc nie mogę dokładnie wyjaśnić, dlaczego to działa, ale działa. Musisz ustawić tę wartość na wartość ujemną dla początkowej transformacji, a następnie zastosować do tego transformacje obrotu warstw. Powinieneś być również w stanie wykonać następujące czynności:
Cel 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
}
który odbudowuje transformację warstwy od zera dla każdego obrotu.
Pełny przykład tego (z kodem) można znaleźć tutaj , gdzie zaimplementowałem rotację dotykową i skalowanie na kilku CALayers
, na podstawie przykładu Billa Dudneya. Najnowsza wersja programu, znajdująca się na samym dole strony, implementuje tego rodzaju operacje perspektywiczne. Kod powinien być w miarę łatwy do odczytania.
sublayerTransform
Odnieść w swojej odpowiedzi to przekształcać, który jest stosowany do podwarstwy twoich UIView's
CALayer
. Jeśli nie masz podwarstw, nie przejmuj się tym. Używam sublayerTransform w moim przykładzie po prostu dlatego, że są dwie CALayers
zawarte w jednej warstwie, którą obracam.