【问题标题】:Load a Navigation ViewController from bottom从底部加载导航 ViewController
【发布时间】:2012-08-06 11:01:13
【问题描述】:

我有四个 ViewControllers ,其中 ViewControllers 使用 UINavigationController 加载。我可以一个一个地切换到每个 ViewController。

问题是,因为我使用的是 NavigationController,所以所有 ViewController 都是从左侧或右侧加载的。但我想从底部加载 ViewController。我知道我可以使用presentModalViewController 从底部展示 ViewController。但它不等同于导航控制器,因为从第 4 个 ViewController,如果我按下一个按钮,我需要来到第 1 个 ViewController。

如何在 NavigationController 中从底部显示 ViewController ?

【问题讨论】:

  • 您可以使用块语句使用自定义动画:)
  • 导航控制器的自定义动画?
  • @AalokParikh。实际上,我使用了 4 个没有导航的 ViewController。但是在一种情况下,我想从第 4 个 ViewController 跳转到第 1 个 ViewController,所以我使用了 NavigationController,但是在使用 Navigation 之后,ViewController 是从左侧或右侧推送的。
  • 是的,只需将 NO 传递给 animated: 参数,然后您就可以使用自定义动画了
  • 没关系,我在一个项目中使用了相同类型的层次结构 :)

标签: iphone ios cocoa-touch uiviewcontroller uinavigationcontroller


【解决方案1】:

在创建 viewController 之后,而不是:

[self.navigationController pushViewController:blablabla animated:YES];

做:

[self presentModalViewController:blablabla animated:YES];

它将来自底部。

要回去,只需说:

[self dismissViewControllerAnimated:YES];

【讨论】:

  • 是的。我知道这一点,并且我已经使用过它。但我想从底部推送 ViewController 以获得导航控制器。在你的情况下,如果我在第 4 个 ViewController,我按下一个按钮如何返回到第一个 ViewController,它是一个根视图控制器
  • Aaa,我的朋友,我想你必须首先:关闭模态呈现的控制器,然后,在你以前的控制器中,在 viewDidAppear 中,检查你是否来自模态,如果是,弹出到根控制器,或其他任何地方。
  • 另一种方式:您使用动画:NO 关闭模式,然后在 viewWillAppear(不是 didAppear)中的前一个控制器中,跳转到所需的导航控制器。这样您就不会看到以前的控制器。但当然,在 viewWillAppear 中,您必须检查您是否来自模态
【解决方案2】:

试试这个:

CATransition *animation = [CATransition animation]; 
[animation setDuration:2]; 
[animation setType:kCATransitionPush]; 
[animation setSubtype:kCATransitionFromTop]; 
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
SecondView *sObj=[[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];
[self.navigationController pushViewController:sObj animated:YES];
[[sObj.view layer] addAnimation:animation forKey:@"SwitchToView1"]; 

【讨论】:

  • 我尝试了很多类型,我找不到任何从底部出现的animationTransition?
  • 然后使用这个:CATransition *animation = [CATransition 动画]; [动画设置持续时间:2]; [动画集类型:kCATransitionPush]; [动画集子类型:kCATransitionFromBottom]; [动画 setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; [[self.view layer] addAnimation:animation forKey:@"SwitchToView1"];
  • 我尝试使用以下代码,但它会立即加载 ViewController。没有动画
  • CATransition *animation = [CATransition 动画]; [动画设置持续时间:5]; [动画集类型:kCATransitionPush]; [动画集子类型:kCATransitionFromTop]; [动画 setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; [[self.view layer] addAnimation:animation forKey:@"SwitchToView1"]; [self.navigationController setNavigationBarHidden:NO]; [self.navigationController pushViewController:_secondViewController 动画:NO];
  • 是的。它工作正常。但第一次看起来不错。谢谢。但我想知道如何以同样的方式删除它。我的意思是从顶部。
【解决方案3】:

使用这个可能会对你有所帮助

[UIView beginAnimations:@"Hide Me" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:kAnimationDur];
subScroll.frame = CGRectMake(0,ksubScrollHideY,ksubScrollW,ksubScrollH);
clickPic.frame = CGRectMake(kButtonX,kButtonHiddenY,kButtonW,kButtonH);
[UIView setAnimationDelegate:self];
[UIView commitAnimations];

快乐编码:)

【讨论】:

  • 对不起。 subScroll 和 clickPic 是什么?
  • 哦 :) 抱歉,这只是从我的项目代码中复制过去,其中一个是 scrollView,一个是按钮 :)
  • 只需将它们替换为您的视图名称或实例 :)
猜你喜欢
  • 2012-03-29
  • 2020-02-11
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
相关资源
最近更新 更多