我有两个视图“ A”和“ B”。浮动在窗口中间(不是全屏)。 B(将替换A的视图)为全屏。我想编写一个自定义过渡,将A翻转以在背面显示B,但同时缩放翻转的矩形,以便在翻转完成时B是全屏显示。

我试过使用transitionFromView:toView:duration:options:completion提供的翻转转换,但是我只能使它翻转整个屏幕,而不是以A的帧开始翻转和以B的帧结束翻转。

我知道我可以对视图的图层进行类似3D的转换,但是我不确定应该使用哪组动画API来完成此操作。我尝试做的一件事是在transitionWithView:duration:options:animations:completion:的动画块中修改视图的图层属性,但这没有用,因为它似乎只支持视图属性的修改。

有人可以指出我正确的方向吗?非常感谢。

更新:到目前为止,这是我的代码可达到的效果。您可以在此处观看有关其操作的视频:http://www.youtube.com/watch?v=-xNMD2fGRwg

ojit_pre

最佳答案

我以前做过这是我做事的要点:


屏幕上显示视图A
创建视图B,为其提供一个使其变为全屏的框架,但不要将其添加到屏幕上
视图B具有UIImageView作为其最高视图
捕获视图A的UIImage,并将其设置为视图B的图像视图的图像

UIGraphicsBeginImageContext(view.bounds.size);
[viewA.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
viewB.imageView.image = image;

设置视图B的变换(缩放和平移),以使其缩小到视图A的大小,并位于屏幕上视图A的位置
将视图B添加到屏幕
此时,用户尚未注意到任何更改,因为视图B看起来与视图A完全一样
现在开始一个动画块,在其中

设置[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:ViewB
将视图B的转换设置为CGAffineTransformIdentity
从视图B删除视图B的imageview



结果是一个动画,看起来像是视图A翻转并缩放以将视图B作为对面填充屏幕。

07-28 06:25