“弯曲”3D中的UIView

问题描述:

创建CA动画的最佳方式是什么?我最初的方法是创建一个CALayers的网格,每个都有一个独特的变换矩阵(我有一些OpenGL的经验,这是我如何在GL)。要做到这一点,我需要将视图分成几个四边形(每个由CALayer表示)。问题是,我该如何做到这一点。在动画开始和使用之前拍摄视图的快照,直到动画完成(如转场可以完成),但我不确定如何拍摄这样的快照是没问题的。“弯曲”3D中的UIView

任何指针(特别是链接代码示例)将黄金价值:)的

经典的回答:

我觉得就是你可能寻找的CALayer的renderInContext:。每个UIView都有一个CALayer,您可以通过layer属性获取CALayer。所以你可以构建你想要的CGContext(假设它将是一个位图上下文),让视图的图层将视图绘制到上下文中,然后根据这些数据做任何你想要的事情,无论它是将它分成一堆UIImages和因此UIImageViews的CoreAnimation效果,上传到OpenGL或其他。

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


更新在2015:

作为iOS的7,如在Q&A 1817记载,UIView提供-drawViewHierarchyInRect:afterScreenUpdates:这降低了甚至进一步快照的图所必需的代码 - 四行在苹果的示例代码。它看起来Q &一个1703已经被撤回,因为它已经不在苹果方面;上面的链接是一个外部归档副本。所以1817年的建议是要遵循的东西。

+0

这正是我所期待的。请记住很久以前阅读它,但不记得要搜索的相关关键字。非常感谢。 – Krumelur 2011-03-19 19:15:29

+0

问与答链接已损坏。 – paulvs 2015-04-08 12:38:03

+0

这似乎是因为iOS 7按照QA1817引入了更简单的方法 - https://developer.apple.com/library/ios/qa/qa1817/_index.html#//apple_ref/doc/uid/DTS40014134;我现在需要冲进一次会议,但稍后会尝试更新我的答案。 – Tommy 2015-04-08 13:58:07