我正在寻找对 UIView 执行透视变换(例如在coverflow中看到的)
有谁知道这是否可能?
我已经使用CALayer并浏览了所有务实的程序员 Core Animation 播客,但我仍然不清楚如何在 iPhone 上创建这种转换。
CALayer
任何帮助、指针或示例代码片段将不胜感激!
正如 Ben 所说,您需要使用UIView's图层,使用 aCATransform3D来执行layer's rotation. 如此处所述,获得透视工作的技巧是直接访问(m34)的矩阵cells之一。CATransform3D矩阵数学从来都不是我的事,所以我无法确切解释为什么会这样,但确实如此。您需要将此值设置为初始变换的负分数,然后将图层旋转变换应用于该值。您还应该能够执行以下操作:
UIView's
CATransform3D
layer's
rotation
cells
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 }
它为每次旋转从头开始重建图层变换。
可以在此处找到一个完整的示例(带有代码) ,其中我根据CALayersBill Dudney 的示例在其中实现了基于触摸的旋转和缩放。最新版本的程序,在页面的最底部,实现了这种透视操作。代码应该相当简单易读。
CALayers
您在回复中引用的sublayerTransform是应用于您的子层的转换UIView's CALayer。如果您没有任何子图层,请不要担心。我在示例中使用 sublayerTransform 只是因为CALayers我正在旋转的一层中包含两个。
sublayerTransform