如何在使用UINavigationController推出UIViewController时使用翻转动画

5
现在我有四个UITableViewControllers
  • A
  • B1,B2
  • C
我需要实现以下效果:
  • 在A上选择一个项目可以推到B1
  • 在B1上点击rightBarButtonItem可以水平翻转到B2
  • 在B2上点击rightBarButtonItem可以水平翻转到B1
  • 在B1或B2上选择一个项目可以推到C
  • 可以在B1或B2处弹回到A
所有视图(A,B1,B2和C)都应该有NavigationBar。
现在我可以在A,B1,B2,C之间导航。我也可以使用以下代码翻转到B2:
//self is B1
- (IBAction)b2ButtonPressed
{
    B2ViewController* B2 = [[B2ViewController alloc] init];
    B2.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

    [self presentModalViewController:B2 animated:YES];
}

但是在B2上,导航栏缺失了。
我在我的iPod touch上有一个应用程序拥有这样的功能。我该如何自己实现它?
2个回答

5

如果您是通过模态展示视图控制器而不是通过导航控制器的推送或弹出来展示视图控制器,则应为视图控制器包装一个导航控制器以显示导航栏:

- (IBAction)b2ButtonPressed
{
  B2ViewController* B2 = [[B2ViewController alloc] init];
  UINavigationController *B2Nav = [[UINavigationController alloc] initWithRootViewController:B2];   
  B2Nav.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
  [self presentModalViewController:B2Nav animated:YES];
  [B2 release];
  [B2Nav release];
}

别忘了在B2ViewController的导航栏中设置左侧或右侧的按钮项。


我需要在B2上有一个返回按钮,这样我就可以返回到A了。我尝试了你的代码,但是我只能得到没有按钮的NavigationBar。 - Zhao Xiang
只有 UINavigationController 的 -pushViewController: 方法可以为您创建返回按钮,如果您呈现模态视图控制器,则需要自己设置按钮。 - cxa
我尝试设置self.navigationItem.backBarButtonItem,但没有显示。然后我尝试了leftBarButtonItem,但似乎无法使其看起来像一个返回按钮,即按钮的左侧有箭头。还有其他想法吗? - Zhao Xiang
我不建议在此处使用后退按钮,因为它不是由导航控制器推动的,但是您可以使用带有后退图标的 UIButton 来模拟它。 - cxa

2

您可以利用UIView动画使B1视图翻转,并在动画完成后将B2视图添加到父视图中吗?

我认为这将保持导航栏不变。


我已经找到了一个符合您描述的苹果样例,正在阅读它。 - Zhao Xiang
祝你好运。这个想法很简单。使用UIView动画来翻转B1视图,并且它还会询问在动画完成时要执行什么操作。您需要告诉它,在动画完成时需要添加B2视图(我猜B1视图也需要被移除。但如果没有,那么在从B2到B1的过渡中,您可以简单地删除B2)。 - user745098

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接