Tôi đang sử dụng phép chuyển đổi CATransform3D để áp dụng hiệu ứng phối cảnh giả 3D cho một khung nhìn.Áp dụng một CATransform3D ngược cho các lớp con của một CALayer đã được chuyển đổi
Tôi đang sử dụng con quay hồi chuyển trong iPhone 4 để kiểm soát các thông số của biến đổi.
Quan điểm tôi là biến đổi có một số subviews:
Kết quả là một cái gì đó như thế này:
nhiệm vụ tiếp theo của tôi là một trong hai ngăn ngừa sự subviews từ việc chuyển đổi khi chế độ xem chính được chuyển đổi hoặc áp dụng phép biến đổi ngược để các bản xem lại không bị ảnh hưởng.
Mục tiêu của tôi là có mỗi tiểu cảnh vuông góc với superview, tạo ấn tượng rằng chúng "đang đứng".
Mã Tôi đang sử dụng cho chuyển đổi:
- (void)update:(NSTimer *)timer
{
roll = [[[_manager deviceMotion] attitude] roll];
pitch = [[[_manager deviceMotion] attitude] pitch];
yaw = [[[_manager deviceMotion] attitude] yaw];
CALayer *layer = [self.view layer];
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, -90 * M_PI/180.0f, 0.0f, 0.0f, 1.0f); // make landscape again
rotationAndPerspectiveTransform.m34 = 1.0/-500; // apply the perspective
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, roll, 1.0f, 0.0f, 0.0f);
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, yaw, 0.0f, 0.0f, 1.0f);
[layer setTransform:rotationAndPerspectiveTransform];
}
Tôi đã thử đoạn mã sau trong một nỗ lực nhằm đảo ngược biến đổi, bằng cách áp dụng một quan điểm xoay 90 độ so với subview quanh trục Y:
for (UIView *subview in [self.view subviews])
{
CALayer *sublayer = [subview layer];
//CATransform3D inverseTransformation = [sublayer transform];
CATransform3D inverseTransformation = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0/-500; // apply perspective
inverseTransformation = CATransform3DRotate(inverseTransformation, 90 * M_PI/180.0f, 0.0f, 1.0f, 0.0f);
[sublayer setTransform:inverseTransformation];
}
nhưng tất cả điều này thành công khi làm là làm cho các bài đánh giá biến mất. Nếu tôi cố gắng sử dụng biến đổi hiện có từ lớp với [sublayer transform]
và áp dụng xoay vòng 3D cho nó, thì các bản xem trước nhấp nháy, nhưng không xoay.
Kiến thức về ma trận Ma trận không phải là tuyệt vời, vì vậy tôi không biết đây có phải là cách tiếp cận chính xác hay không.
Làm cách nào để làm cho các bản xem phụ có thể vuông góc với chế độ xem siêu?