Jak powiedział Ben, będziesz musiał pracować z UIView'swarstwą, używając CATransform3Ddo wykonania layer's rotation. Sztuką dostać perspektywiczny działa, jak opisano tutaj , ma bezpośredni dostęp do jednego z matrycą cellso 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.
sublayerTransformOdnieść 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 CALayerszawarte w jednej warstwie, którą obracam.