我有一个 UIView(因此也是一个 CALayer),我试图在 3D 空间中稍微弯曲或弯曲。也就是说,假设我的 UIView 是一个平面标签,我想将其部分包裹在啤酒瓶上(不是 360 度,只是在一个“侧面”上)。
我认为这可以通过对视图的图层应用变换来实现,但据我所知,这种变换仅限于图层的旋转、缩放和平移。我在这里可能是错的,因为我的线性代数在这一点上是模糊的,至少可以这么说。
我怎样才能做到这一点?
我有一个 UIView(因此也是一个 CALayer),我试图在 3D 空间中稍微弯曲或弯曲。也就是说,假设我的 UIView 是一个平面标签,我想将其部分包裹在啤酒瓶上(不是 360 度,只是在一个“侧面”上)。
我认为这可以通过对视图的图层应用变换来实现,但据我所知,这种变换仅限于图层的旋转、缩放和平移。我在这里可能是错的,因为我的线性代数在这一点上是模糊的,至少可以这么说。
我怎样才能做到这一点?
使用 Core Animation 可以做的最好的事情是进行分段线性逼近。
例如,你可以将你的“圆柱体”分成八个部分,并像这样排列它们:
_
/ \
| |
您可以为它们提供所有相同的图像,但更改翻译以使它们在边缘对齐。然后给每个人一个变换(一个简单的水平压缩或一种“基石”,如果你想要一个透视外观)。
实际上,您可能希望使用八个以上的段。请注意,它们将集中在您的视图边缘附近。
这个 CSS 动画可能会给你一些启发。
看看 Apple 的示例代码PVRTextureLoader 这是一个 OpenGL 项目,演示如何在表面(在您的情况下为圆柱体)上显示纹理(您的标签)。
Jeff LaMarche 发布了一个很好的教程来开始使用 Open GL。
此页面上有一些“扭曲”示例:http ://www.sgi.com/products/software/opengl/examples/more_samples/
我(老实说)不知道该怎么做,但我已经把这个页面加入书签很长一段时间了,试图用网格/网格扭曲/变形 UIView。
祝你好运。
^.^