iPhone模态视图animation帮助
我没有做过多的animation,我需要一些帮助。 我有一个tabBarController
作为我的根控制器,我想要另一个tabBarController
,我想把它作为一个模态视图控制器,我有一个animation的问题。
目前有四个modalViewControllers
animation,即
typedef enum { UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizontal, UIModalTransitionStyleCrossDissolve, UIModalTransitionStylePartialCurl, } UIModalTransitionStyle;
我想要一个不同的animation – 从右到左滑动。 – 我怎样才能做这个animation?
任何帮助?
编辑:
我的想法推tabBarController到导航堆栈糟透了! 苹果对这种做法的评论:
您从不想将标签栏控制器推到导航控制器的导航堆栈上。 这样做会造成一种不寻常的情况,只有当特定的视图控制器位于导航堆栈的顶部时,标签栏才会出现。 标签栏被devise为持久的,所以这种瞬态方法可能会让用户感到困惑。
我没有想法。 有人帮我模态视图控制器的animation。
您可以手动编写animation代码。 以下是一般步骤:
- 创build一个
UIViewController
的子类(本质上是一个控制器来容纳你的UITabBarController
) – 我通常调用这个ShellViewController
。 - 在
ShellViewController
的init
方法中(无论使用哪一个),将其frame
设置在屏幕的右边,例如[self.view setFrame:CGRectMake(320, 0, 320, 480)];
- 在
ShellViewController
创build两个方法-
- (void)presentSelf
-
- (void)dismissSelf
-
- 当你想展示你的
UITabBarController
时候创build一个ShellViewController
的实例 - 将您的
UITabBarController
实例放在ShellViewController
实例的内部 - 调用
[currentView addSubview:shellViewController.view];
- 使用上面的自定义方法来展示和解雇容纳你的
UITabBarController
的ShellViewController
- 根据您的业务逻辑规定处理内存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议? 也许分段控制更合适?