具有缩放动画的pushViewController,可显示背景

moo*_*nce 5 ios

我有找到用缩放动画调用pushViewController的方法,例如facebook iPhone应用程序主菜单图标单击动画。(新的viewController从中心弹出,并缩放到原始大小。)

我搜索了几种更改pushViewController动画的方法。

首先,我尝试了这个:

viewController.view.transform = CGAffineTransformMakeScale(0.5f, 0.5f);
[UIView animateWithDuration:0.5f animations:^{ 
    viewController.view.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
}];
[self.navigationController pushViewController:viewController animated:NO];
Run Code Online (Sandbox Code Playgroud)

但是有问题,动画开始播放时,旧的viewController消失了,只有白色背景。

如果使用CATransition更改动画,则可以同时显示新旧的viewController,但是没有缩放动画,只能移动,推入和淡入动画。

我想同时显示CATransition动画之类的新旧视图控制器,并需要实现我的自定义动画的方法。

这是我最后的建议,肮脏的方式:

[self.view addSubview:viewController.view];
viewController.view.transform = CGAffineTransformMakeScale(0.5f, 0.5f);
[UIView animateWithDuration:0.5f
                      delay:0.0f
                    options:UIViewAnimationCurveEaseInOut
                 animations:^{
    viewController.view.alpha = 1.0f;
    viewController.view.transform = CGAffineTransformMakeScale(1.0f, 1.0f); 
} completion:^(BOOL finished) {
    [self.navigationController pushViewController:viewController animated:NO];
    [viewController release];
}];
Run Code Online (Sandbox Code Playgroud)

首先,我添加了新的viewController.view作为子视图,我可以同时显示具有新视图和旧视图的动画。动画结束后,请稍后推送。

这样我可以实现我的想法,但是我认为这是肮脏的,仍然存在问题:

导航栏项目不会立即更改,动画结束后会更改。

是否有任何简单清晰的方法来实现此动画?我认为如果不更改pushViewController的原始功能就不可能做到这一点,我应该继承pushViewController的子类吗?

感谢您的阅读,以及您的帮助。

hon*_*eng 2

我不认为动画是通过视图控制器完成的。您可以只保留现有的视图控制器。创建一个应该放大的新 UIView。将该新 UIView 添加到现有视图控制器并向其应用动画。