关于this one
的跟进问题假设我的应用有多个ViewControllers
,我们称之为A,B,C,D。通常向后移动一步,即从D - >向后移动。 C,将使用NavigationBar
中的后退按钮或使用行
[self.navigationController popViewControllerAnimated:YES];
我想要做的是回到几个步骤,比如D - > B.这将通过
完成[self.navigationController popToViewController:B animated:YES];
不幸的是,这样我无法决定使用哪种动画。我必须使用翻转动画而不是默认动画。
我找到的唯一方法就是这个方法
[self.navigationController transitionFromViewController:self.navigationController.presentedViewController toViewController:B duration:300 options:UIViewAnimationOptionTransitionFlipFromRight animations:nil completion:nil];
这是实现这一目标的唯一途径,还是有人可以建议更好的方法来实现这一目标?
答案 0 :(得分:1)
您可以从导航堆栈中删除C视图控制器,这样当它从D弹出时,它将直接进入视图B
// Remove Controller C from Stack
NSMutableArray *controllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];
[controllers removeObject:C];
[self.navigationController setViewControllers:controllers];
然后您可以将[self.navigationController popViewControllerAnimated:YES];
与您想要的动画一起使用,它将弹回以查看B
要在弹出视图控制器时执行实际的翻转动画,可以使用下面的动画代码
[UIView beginAnimations:@"flip_animation" context:nil];
[UIView setAnimationDuration:1];
[UIView setAnimationTransition:UIViewAnimationOptionTransitionFlipFromTop forView:self.navigationController.view cache:NO];
[self.navigationController popViewControllerAnimated:NO];
[UIView commitAnimations];
答案 1 :(得分:0)
参考你的评论......
“听起来不错,但我会在哪里定义它应该是一个翻转动画?据我所知,这仍然使用默认动画。 - taymless”
你需要执行动画意味着你使用这段代码......
-(void)animatefromView:(UIView*)fromView toBlock:(void (^)(void))block // note block may be any executable code...
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration: 1];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:fromView cache:NO];
block();
[UIView commitAnimations];
}
并且方法调用将是....
[self animatefromView:self.navigationController.view toBlock:^{
[self.navigationController pushViewController:ani animated:NO];
}];
我希望这能帮到你......