在 3D 中“弯曲”一个 UIView

Kru*_*lur 5 iphone core-animation

创建赋予视图曲率感的 CA 动画的最佳方法是什么?

我最初的方法是创建一个 CALayer 网格,每个网格都有一个独特的变换矩阵(我有一些 OpenGL 经验,这就是我在 GL 中的做法)。为此,我需要将视图分成几个四边形(每个由一个 CALayer 表示)。问题是,我该怎么做。在动画开始时拍摄视图的快照并使用直到动画完成(就像过渡可以做的那样)就可以了,但我不确定如何拍摄这样的快照。

任何指针(尤其是指向代码示例的链接)都具有黄金价值:)

Tom*_*mmy 2

经典答案:

\n\n

我认为您可能正在寻找的是 CALayer 的renderInContext:每个UIView都有一个CALayer,您可以通过layer属性获取它。因此,您可以构建所需的 CGContext(大概是位图上下文),让视图的层将视图绘制到上下文,然后对这些数据执行任何您想要的操作,无论是否将其分割成一堆 UIImages 和 UIImageViews 以获得 CoreAnimation 效果,将其上传到 OpenGL 或其他。

\n\n

Apple 在Q&A 1703中直接提供了示例代码,它使用 UIKit CoreGraphics 扩展直接跳转到 UIImage 并挖掘所有可用窗口以捕获整个屏幕的图像。但它向你展示了事物的本质。

\n\n
\n\n

2015年更新:

\n\n

从 iOS 7 开始,如Q&A 1817中所述,UIView它可以将-drawViewHierarchyInRect:afterScreenUpdates:视图快照所需的代码进一步减少 \xe2\x80\x94 到 Apple 示例代码中的四行。Q&A 1703 似乎已被撤回,因为 Apple 方面不再提供该问题;上面的链接是外部存档副本。因此,1817 年的建议值得遵循。

\n