正如本所说,你需要与UIView's
层,使用CATransform3D
执行layer's
rotation
。让观点发挥作用的技巧,如此处描述,就是直接访问矩阵之一cells
of the CATransform3D
(m34)。矩阵数学从来都不是我的菜,所以我无法准确解释为什么它有效,但它确实有效。您需要将此值设置为初始变换的负分数,然后对其应用图层旋转变换。您还应该能够执行以下操作:
Objective-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;
雨燕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
}
它为每次旋转从头开始重建图层变换。
可以找到完整的示例(带有代码)here,我在其中几个上实现了基于触摸的旋转和缩放CALayers
,基于 Bill Dudney 的示例。该程序的最新版本,在页面的最底部,实现了这种透视操作。代码应该相当简单易读。
The sublayerTransform
您在回复中提到的是应用于您的子层的变换UIView's
CALayer
。如果您没有任何子层,请不要担心。我在示例中使用 sublayerTransform 只是因为有两个CALayers
包含在我正在旋转的一层内。