最近看到了一个比较好看的动画效果,就是通过点击了一个View,被点击的View会被翻转过来,然后在其背面显示出另一个ViewController的内容。就像一张两面的板子被翻转一样。于是在最近的项目里面就写了下这个效果:
思路是这样的,先将被显示的ViewController的内容渲染到一张图片上去。
然后在window上面添加一个新的View将被点的View的内容渲染成图片后显示在此新建的View上,并且调整新建的view的位置。
隐藏被点View,然后开始反转动画。为了简单起见动画分为2步,第一步为旋转90度。第二步开始反向旋转90度,但是在开始之前将ViewController的图片显示在该View上。
最后将Viewcontroller Present出来就好了。
具体看代码吧
给UIViewController建一个Category,这样使用就很方便了。
所有代码在下面:
[html]
view plain
copy
- -
(void)flipView:(UIView *)view toPresentViewController:(UIViewController *)controller completion:(void (^)(void))completion { -
[self retain]; -
[view retain]; -
[controller retain]; -
//调整大小 -
UIWindow *window = [UIApplication sharedApplication].keyWindow; -
CGRect frame = window.frame; -
frame.size.height -= 20; -
frame.origin.y = 20; -
controller.view.frame = frame; -
[controller.view layoutIfNeeded];