我希望在UIView上执行透视变换(如coverflow中所示)
有人知道这是否可能吗?
我已经调查了使用CALayer
,并浏览了所有实用程序员的核心动画播客,但我仍然不太清楚如何在iPhone上创建这种转换.
任何帮助、指针或示例代码片段都将不胜感激!
我希望在UIView上执行透视变换(如coverflow中所示)
有人知道这是否可能吗?
我已经调查了使用CALayer
,并浏览了所有实用程序员的核心动画播客,但我仍然不太清楚如何在iPhone上创建这种转换.
任何帮助、指针或示例代码片段都将不胜感激!
正如Ben所说,您需要使用UIView's
层,使用CATransform3D
来执行layer's
rotation
.使透视工作(如described here)的诀窍是直接访问CATransform3D
(M34)的矩阵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;
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
}
它会为每次旋转从头开始重建层变换.
这方面的完整示例(带有代码)可以在here中找到,其中我基于Bill Dudney的一个示例在两个CALayers
上实现了基于touch 的旋转和zoom .该程序的最新版本,在页面的最底部,实现了这种透视操作.代码应该相当简单易读.
您在响应中引用的sublayerTransform
是应用于UIView's
CALayer
的子层的转换.如果您没有任何子层,请不要担心.我在示例中使用subayerTransform,原因很简单,因为我要旋转的一个层中包含两个CALayers
.