如何仅在复合UIView的一部分中应用三维透视变换?

时间:2012-06-02 14:52:44

标签: ios core-animation calayer cgimage cabasicanimation

我使用UIImageViews,UILabels,UITextView进行UIView。

我的目标是改造中间部分,使它看起来像折叠一张纸: - 顶部和底部部分保持不变,只是它们相互滑动 - 中间部分向屏幕折叠 (如在清除应用中:http://blog.massivehealth.com/post/18563684407/clear?cbe4fc38

我的想法是首先加载整个视图,然后分成4个部分,将中间的两个部分放入CGImage中,并以某种方式用透视动画它们同时转换顶部和底部部分,使它们相互滑动(最后,中间两个)零件应该变得不可见。)

我也应该能够展开这个视图并滚动UITextView。

我不是在寻找一个准备好的答案,只是指向正确的解决方案。 我遇到了CALayer,CABasicAnimation和CGImage,但还不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

我认为你的方法很合理。由于无法将变换应用于视图的一部分,因此必须将容器视图拆分为单独的部分。您可以使用CALayer方法renderInContext:将视图渲染为静态图像。然后,您可以将此图像分割为所需的部分,将图像部分放在原始视图上(或用图像替换视图)并为图像设置动画。动画完成后,以新的形式恢复视图。

答案 1 :(得分:1)

一些指示:

  1. 将您的UIView转换为图片:请参阅此post;要么拍摄视图的4个“快照”,要么:

    1.2你拿一个,然后裁剪得到的图像(见here进行裁剪);

  2. 创建一个新视图并添加4个CALayers作为self.layer的子图层;每个图层的contents属性设置为相应的UIImage;

  3. 根据需要为视图图层设置动画;看看this file from the Leaves framework看看如何做到这一点;基本上,此代码使用CATransaction和转换来为图层的属性设置动画(在这种情况下,表示一个图层的位置与另一个图层相对),这样当属性值更改时,图层会相应地重新绘制。

    < / LI>

    希望它有所帮助。