0

跟进这个问题

假设我的应用程序有几个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]; 

这是实现这一目标的唯一方法还是有人可以提出更好的方法来做到这一点?

4

2 回答 2

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];
于 2012-09-12T09:01:42.647 回答
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];
                                                                    }];

我希望这能帮到您...

于 2012-09-12T09:54:21.010 回答