我没有做过很多动画,我需要一些帮助。我有一个tabBarController
作为我的根控制器,我想有另一个tabBarController
,我想把它作为一个模态视图控制器,我有动画的问题。
目前modalViewControllers
有四个动画,分别是
typedef enum {
UIModalTransitionStyleCoverVertical = 0,
UIModalTransitionStyleFlipHorizontal,
UIModalTransitionStyleCrossDissolve,
UIModalTransitionStylePartialCurl,
} UIModalTransitionStyle;
我想要一个不同的动画-从右到左滑动。- 我怎么做这个动画?
有什么帮助吗?
编辑:
我把一个tabBarController推到导航栈上的想法糟透了!苹果对这种做法的评论:
永远不要把标签栏控制器推到导航控制器的导航堆栈上。这样做会造成一种不寻常的情况只有当特定视图控制器位于导航堆栈的顶部时,选项卡栏才会出现。选项卡栏被设计为持久的,因此这种短暂的方法可能会让用户感到困惑。
我没有主意了。谁来帮我一下模态视图控制器的动画
您可以手动编写动画代码。以下是一般步骤:
- 创建
- 在
ShellViewController
的init
方法中(无论您使用哪种方法),将其frame
设置在屏幕右侧的外部,例如[self.view setFrame:CGRectMake(320, 0, 320, 480)];
- 在
ShellViewController
中创建两个方法-
- (void)presentSelf
-
- (void)dismissSelf
-
- 当你想展示你的
UITabBarController
时,创建ShellViewController
的实例 - 将
UITabBarController
实例放在ShellViewController
实例中 - Call
[currentView addSubview:shellViewController.view];
- 使用上面的自定义方法来显示和取消
ShellViewController
容纳UITabBarController
- 按照业务逻辑的要求处理内存管理
UIViewController
的子类(本质上是一个无用的控制器来容纳你的UITabBarController
) -我通常称之为ShellViewController
。下面是动画导入的代码(例如- (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];
下面是动画退出的代码(例如- (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];
请记住,这些动画方法只做 that: animate。它们不会禁用与当前视图的交互,也不会禁用正在动画输入/输出的ShellViewController
的视图/子视图。您需要在动画期间手动禁用用户交互,然后在动画完成后恢复它。有一个UIView
方法,当动画完成时执行一个选择器:
[UIView setAnimationDidStopSelector:@selector(enableUserInteraction)];
你可以把它放在上面每个动画块的[UIView setAnimationDelegate:self]
后面。当然,您需要自己编写enableUserInteraction
方法……和disableUserInteraction
方法
走这条路很麻烦,但很有效。一旦您将ShellViewController
写好,它就会成为一个很好的可重用代码段。
将根选项卡栏控制器嵌入到UINavigationController中。如果它不允许,在它们之间插入一个UIViewController (making: UINavigationController嵌入UIViewController,它有一个UITabBarController的视图添加到它)。这是非常糟糕的,但它应该(!)工作
模态视图控制器不会滑动进来,因为这是标准的堆栈动画(push或弹出)。这让用户感到困惑。如果它是模态的,你真的应该从底部向上滑动或者翻转。
为什么在模态视图上需要标签栏?典型的模态视图用于数据输入,音频回放等。标签栏HIG指出"一般来说,使用标签栏在应用程序级别组织信息"。在模态视图控制器中使用标签栏打破了这一点。当然,你不必完全遵循HIG中的每一条指导原则,但在这种情况下,你真的应该考虑听从苹果的建议。
你能告诉我们更多关于你的具体用例,以便我们可以就什么可能是合适的解决方案提出建议吗?也许分段控制更合适?