2012-06-02 28 views
2

我有UIImageViews,UILabels,UITextView的UIView。如何将3D透视变换仅应用于复合UIView的一部分?

我的目标是把中间的部分,因此它看起来像折叠一张纸: - 顶部和底部保持不变只有他们对海誓山盟 滑动 - 中间部分朝屏幕 折叠(如清除应用程式:http://blog.massivehealth.com/post/18563684407/clear?cbe4fc38

我的想法是第一加载整个视图中,然后分成4份,使中间的两个部件为CGImage并以某种方式与立体同时转化的顶部和底部部分制作动画,所以它们朝海誓山盟滑动(最后,中间两部分应该变得不可见)。

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

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

回答

1

几个要点:

  1. 将您UIView成图像:看到这个post;或者您拍摄4张您的视图的快照,或者:

    1.2您拍摄一张照片,然后剪裁生成的图像(请参阅here进行裁剪);

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

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

希望它有帮助。

+0

是的,那帮助:)我差不多完成了。谢谢! – patrykens

2

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

+0

所以基本上你在做什么我必须:1.布置一个视图2.渲染静态图像3.将图像拆分为4部分4.动画5.创建新视图6.删除静态图像?因此,首先我会使用renderInContext,什么类/方法将有助于分裂这个静态图像,然后用3D透视动画? – patrykens