您可以手动编写动画代码。以下是一般步骤:
1. 创建一个
UIViewController
的子类(主要是用来容纳
UITabBarController
的虚拟控制器),我通常称之为
ShellViewController
。
2. 在
ShellViewController
的
init
方法中(使用任何一个你想要使用的方法),将其
frame
设置在屏幕右侧以外,例如:
[self.view setFrame:CGRectMake(320, 0, 320, 480)];
3. 在
ShellViewController
内部创建两个方法:
- (void)presentSelf
- (void)dismissSelf
4. 当您想要呈现
UITabBarController
时,创建一个
ShellViewController
的实例。
5. 将您的
UITabBarController
实例放置在
ShellViewController
实例内。
6. 调用
[currentView addSubview:shellViewController.view];
。
7. 使用上述自定义方法来呈现和解除呈现包含您的
UITabBarController
的
ShellViewController
。
8. 根据您的业务逻辑处理内存管理。
以下是动画效果的演示代码(例如,
- (void)presentSelf
方法):
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.15];
[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];
请记住,这些动画方法仅仅是用来做动画的。它们不会禁用当前视图或ShellViewController
的视图/子视图与之交互的能力。在动画期间,您需要手动禁用用户交互,然后在动画完成后再恢复它。有一个UIView
方法可以在动画完成时执行选择器:
[UIView setAnimationDidStopSelector:@selector(enableUserInteraction)]
你可以将此代码放在上面每个动画块的
[UIView setAnimationDelegate:self]
后面。当然,你需要自己编写
enableUserInteraction
方法……以及
disableUserInteraction
方法。
这么做有点麻烦,但它确实有效。一旦你编写好
ShellViewController
,它就成为了一个不错的可重用代码片段。
UIModalTransitionStyle
,但不幸的是没有一个动画与导航控制器转换样式相匹配。我认为你应该使用你的替代想法并使用导航控制器。 - Trevor