使用自定义动画在导航树中跳回几个步骤

时间:2012-09-12 08:54:32

标签: objective-c animation

关于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]; 

这是实现这一目标的唯一途径,还是有人可以建议更好的方法来实现这一目标?

2 个答案:

答案 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];
                                                                    }];

我希望这能帮到你......