iPhone模态视图animation帮助

我没有做过多的animation,我需要一些帮助。 我有一个tabBarController作为我的根控制器,我想要另一个tabBarController ,我想把它作为一个模态视图控制器,我有一个animation的问题。

目前有四个modalViewControllersanimation,即

 typedef enum { UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizontal, UIModalTransitionStyleCrossDissolve, UIModalTransitionStylePartialCurl, } UIModalTransitionStyle; 

我想要一个不同的animation – 从右到左滑动。 – 我怎样才能做这个animation?

任何帮助?


编辑:

我的想法推tabBarController到导航堆栈糟透了! 苹果对这种做法的评论:

您从不想将标签栏控制器推到导航控制器的导航堆栈上。 这样做会造成一种不寻常的情况,只有当特定的视图控制器位于导航堆栈的顶部时,标签栏才会出现。 标签栏被devise为持久的,所以这种瞬态方法可能会让用户感到困惑。

我没有想法。 有人帮我模态视图控制器的animation。

您可以手动编写animation代码。 以下是一般步骤:

  • 创build一个UIViewController的子类(本质上是一个控制器来容纳你的UITabBarController ) – 我通常调用这个ShellViewController
  • ShellViewControllerinit方法中(无论使用哪一个),将其frame设置在屏幕的右边,例如[self.view setFrame:CGRectMake(320, 0, 320, 480)];
  • ShellViewController创build两个方法
    • - (void)presentSelf
    • - (void)dismissSelf
  • 当你想展示你的UITabBarController时候创build一个ShellViewController的实例
  • 将您的UITabBarController实例放在ShellViewController实例的内部
  • 调用[currentView addSubview:shellViewController.view];
  • 使用上面的自定义方法来展示和解雇容纳你的UITabBarControllerShellViewController
  • 根据您的业务逻辑规定处理内存pipe理

这里是animation代码(例如- (void)presentSelf方法):

 [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.15]; //the double represents seconds [UIView setAnimationDelegate:self]; [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; [[self view] setFrame:CGRectMake(0, 0, 320, 480)]; [UIView commitAnimations]; 

这里是animation代码(例如- (void)dismissSelf方法):

 [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.15]; [UIView setAnimationDelegate:self]; [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; [[self view] setFrame:CGRectMake(320, 0, 320, 480)]; [UIView commitAnimations]; 

请记住,这些animation方法只做 :animation。 它们不会禁用与当前视图的交互,也不会禁用正在进/出animation的ShellViewController的视图/子视图。 您需要在animation过程中手动禁用用户交互,然后在animation完成后将其恢复。 有一个UIView方法在animation完成时执行一个select器:

 [UIView setAnimationDidStopSelector:@selector(enableUserInteraction)]; 

你可以把它放在上面每个animation块的[UIView setAnimationDelegate:self]之后。 当然,你需要自己编写enableUserInteraction方法,并enableUserInteraction方法。

走这条路线是一件麻烦事,但是起作用了。 一旦你得到了ShellViewController书面,它使一个很好的可重用的片段。

将您的根标签栏控制器embedded到UINavigationController中。 如果它不允许你,在它们之间粘贴一个UIViewController(使:UINavigationControllerembeddedUIViewController,它有一个UITabBarController的视图添加到它)。 这很糟糕,但它应该(!)工作。

模态视图控制器不会滑入,因为这是标准的堆栈animation(推送或popup)。 这让用户感到困惑。 如果它是模态的,你真的应该从底部滑动或做翻转或什么的。

为什么你需要一个模式视图上的标签栏? 通常情况下,模态视图用于数据input,audio回放等。 标签栏HIG指出“通常,使用标签栏来组织应用程序级别的信息”。 在模态视图控制器中有一个标签栏打破了这一点。 当然,我们并不需要严格按照HIG中的每条准则进行操作,但是在这种情况下,您应该考虑遵循Apple的build议。

你能告诉我们更多关于你的具体用例,所以我们可以提出什么可能是一个合适的解决scheme的build议? 也许分段控制更合适?