以下情况。 我有一个使用UINavigationController进行导航的应用程序。
对于推送特殊导航控制器,我想要一个自定义动画,缩小。 我到目前为止看起来很好,唯一的问题是,“旧的”Viewcontroller在动画开始之前消失了,所以新的viewcontroller缩小了“nothing”,而不是在后台查看旧的viewcontroller。
为了更好地观看,我创建了一个简单的示例应用:download
是否有人知道,如何动画新的视图控制器(image3),旧的视图控制器(image1)在动画时保留在背景中(图像2)?
/* THIS CANNOT BE CHANGED */
AnimatedViewController *animatedViewController = [[AnimatedViewController alloc] initWithNibName:@"AnimatedViewController" bundle:nil];
/* THIS CAN BE CHANGED */
animatedViewController.view.transform = CGAffineTransformMakeScale(0.01, 0.01);
[UIView beginAnimations:@"animationExpand" context:NULL];
[UIView setAnimationDuration:0.6f];
animatedViewController.view.transform=CGAffineTransformMakeScale(1, 1);
[UIView setAnimationDelegate:self];
[UIView commitAnimations];
/* THIS CANNOT BE CHANGED */
[self.navigationController pushViewController:animatedViewController animated:NO];
其他信息:我的应用程序并不那么简单。我为我的应用程序使用了three20框架,但视图控制器的推送和创建就是three20所做的。我只能挂钩(我的代码中的THIS CAN BE CHANGED
)之间的部分。我无法在此之前和之后更改代码(除非经过大量研究)。
答案 0 :(得分:9)
我很快就把它鞭打了。我们的想法是在缩放动画完成后调用pushViewController。
-(IBAction)animateButtonClicked:(id)sender {
animatedViewController = [[AnimatedViewController alloc] initWithNibName:@"AnimatedViewController" bundle:nil];
animatedViewController.view.transform = CGAffineTransformMakeScale(0.01, 0.01);
[UIView animateWithDuration:0.6
animations:^{
[self.view addSubview:animatedViewController.view];
animatedViewController.view.transform=CGAffineTransformMakeScale(1, 1);
}
completion:^(BOOL finished){
[animatedViewController.view removeFromSuperview];
[self.navigationController pushViewController:animatedViewController animated:NO];
}];
}
答案 1 :(得分:0)
好的,这样做的一种方法(有点难看)是做动画,完成动画后,执行pushViewController。当您进行动画制作时,您需要为即将呈现的视图控制器的屏幕设置动画。由于动画以新视图结束,当新视图进入屏幕时,不应该更改任何内容,因为它与刚刚设置的动画视图相同。