我想在UIView上执行透视变换(例如在coverflow中看到)
有谁知道这是否可能?
我已经调查过使用CALayer
并且已经完成了所有实用的程序员Core Animation播客,但我仍然不清楚如何在iPhone上创建这种转换.
任何帮助,指针或示例代码片段将非常感谢!
正如Ben所说,你需要使用UIView的图层,使用CATransform3D来执行图层的旋转.如此处所述,获得透视工作的技巧是直接访问CATransform3D(m34)的一个矩阵单元.矩阵数学从来就不是我的事情,所以我无法解释为什么这样有效,但确实如此.您需要将此值设置为初始变换的负分数,然后将图层旋转变换应用于该变换.您还应该能够执行以下操作:
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;
每次旋转都会从头开始重建图层变换.
在这里可以找到这个(带代码)的完整示例,其中我基于Bill Dudney的一个例子,在几个CALayers上实现了基于触摸的旋转和缩放.该程序的最新版本位于页面的最底部,实现了这种透视操作.代码应该相当简单易读.
您在响应中引用的sublayerTransform是一个应用于UIView的子层的变换UIView's
.如果您没有任何子图层,请不要担心.我在我的例子中使用sublayerTransform只是因为我正在旋转的一个图层中包含两个CALayer.
您只能使用直接应用于UIView的transform属性的Core Graphics(仅Quartz,2D)变换.要在coverflow中获得效果,您必须使用CATransform3D,它们应用于三维空间,因此可以为您提供所需的透视图.您只能将CATransform3D应用于图层而不是视图,因此您必须为此切换到图层.
查看Xcode附带的"CovertFlow"示例.它只是mac-only(即不适用于iPhone),但很多概念转移得很好.