Như Ben đã nói, bạn sẽ cần phải làm việc với UIView's
lớp, sử dụng một CATransform3D
để thực hiện layer's
rotation
. Mẹo để làm cho phối cảnh hoạt động, như được mô tả ở đây , là truy cập trực tiếp vào một trong các ma trận cells
của CATransform3D
(m34). Ma trận toán học chưa bao giờ là chuyện của tôi, vì vậy tôi không thể giải thích chính xác tại sao nó lại hoạt động, nhưng nó thì có. Bạn sẽ cần đặt giá trị này thành phân số âm cho biến đổi ban đầu của mình, sau đó áp dụng biến đổi xoay vòng lớp của bạn cho biến đổi đó. Bạn cũng có thể làm như sau:
Mục tiêu-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
}
mà xây dựng lại biến đổi lớp từ đầu cho mỗi vòng quay.
Một ví dụ đầy đủ về điều này (có mã) có thể được tìm thấy ở đây , nơi tôi đã thực hiện xoay vòng dựa trên cảm ứng và nhân rộng trên một vài CALayers
ví dụ, dựa trên một ví dụ của Bill Dudney. Phiên bản mới nhất của chương trình, ở dưới cùng của trang, thực hiện loại hoạt động phối cảnh này. Mã phải đơn giản hợp lý để đọc.
Các sublayerTransform
bạn tham khảo trong phản hồi của bạn là một biến đổi được áp dụng cho các lớp con của bạn UIView's
CALayer
. Nếu bạn không có bất kỳ lớp con nào, đừng lo lắng về nó. Tôi sử dụng sublayerTransform trong ví dụ của mình đơn giản vì có hai cái được CALayers
chứa trong một lớp mà tôi đang xoay.