8

我有一个 UIView(因此也是一个 CALayer),我试图在 3D 空间中稍微弯曲或弯曲。也就是说,假设我的 UIView 是一个平面标签,我想将其部分包裹在啤酒瓶上(不是 360 度,只是在一个“侧面”上)。

我认为这可以通过对视图的图层应用变换来实现,但据我所知,这种变换仅限于图层的旋转、缩放和平移。我在这里可能是错的,因为我的线性代数在这一点上是模糊的,至少可以这么说。

我怎样才能做到这一点?

4

3 回答 3

3

使用 Core Animation 可以做的最好的事情是进行分段线性逼近。

例如,你可以将你的“圆柱体”分成八个部分,并像这样排列它们:

  _
 / \
|   |

您可以为它们提供所有相同的图像,但更改翻译以使它们在边缘对齐。然后给每个人一个变换(一个简单的水平压缩或一种“基石”,如果你想要一个透视外观)。

实际上,您可能希望使用八个以上的段。请注意,它们将集中在您的视图边缘附近。

这个 CSS 动画可能会给你一些启发。

于 2010-03-11T02:07:10.570 回答
2

看看 Apple 的示例代码PVRTextureLoader 这是一个 OpenGL 项目,演示如何在表面(在您的情况下为圆柱体)上显示纹理(您的标签)。

Jeff LaMarche 发布了一个很好的教程来开始使用 Open GL。

于 2010-03-15T18:33:32.083 回答
1

此页面上有一些“扭曲”示例:http ://www.sgi.com/products/software/opengl/examples/more_samples/

我(老实说)不知道该怎么做,但我已经把这个页面加入书签很长一段时间了,试图用网格/网格扭曲/变形 UIView。

祝你好运。

^.^

于 2010-03-16T10:12:13.403 回答