在3D中“弯曲”UIView

时间:2011-03-18 17:17:26

标签: iphone core-animation

创建可为视图提供曲率感的CA动画的最佳方法是什么?

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

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

1 个答案:

答案 0 :(得分:2)

经典答案:

我认为你可能正在寻找的是CALayer的renderInContext:。每个UIView都有一个CALayer,你可以通过layer属性获得。因此,您可以构建所需的CGContext(可能是位图上下文),让视图层将视图绘制到上下文中,然后根据需要对该数据执行任何操作,无论是将其划分为一堆UIImages还是因此UIImageViews用于CoreAnimation效果,将其上传到OpenGL或其他任何内容。

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


2015年更新:

从iOS 7开始,正如Q&A 1817中所述,UIView提供了-drawViewHierarchyInRect:afterScreenUpdates:,它减少了将视图进一步快照所需的代码 - 在Apple的示例代码中减少了四行。看来Q& A 1703已被撤销,因为苹果方面已不再提供;上面的链接是外部存档副本。所以1817年的建议就是要遵循的东西。