您可以使用 Apple 的新 viewController 包含系统。如需更深入的信息,请查看 WWDC 2011 会议视频“实施UIViewController
遏制”。
作为 iOS5 的新功能,UIViewController
Containment 允许您拥有一个父 viewController 和许多包含在其中的子 viewController。这就是 UISplitViewController 的工作原理。这样做您可以在父级中堆叠视图控制器,但对于您的特定应用程序,您只是使用父级来管理从一个可见视图控制器到另一个的转换。这是 Apple 认可的做事方式,从一个子 viewController 制作动画是无痛的。此外,您还可以使用所有各种不同的UIViewAnimationOption
过渡!
此外,使用 UIViewContainment,除非您愿意,否则您不必担心在方向事件期间管理子视图控制器的混乱。您可以简单地使用以下内容来确保您的 parentViewController 将旋转事件转发给子 viewController。
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers{
return YES;
}
您可以在父母的 viewDidLoad 方法中执行以下或类似操作来设置第一个 childViewController:
[self addChildViewController:self.currentViewController];
[self.view addSubview:self.currentViewController.view];
[self.currentViewController didMoveToParentViewController:self];
[self.currentViewController.swapViewControllerButton setTitle:@"Swap" forState:UIControlStateNormal];
然后当您需要更改子视图控制器时,您可以在父视图控制器中调用以下内容:
-(void)swapViewControllers:(childViewController *)addChildViewController:aNewViewController{
[self addChildViewController:aNewViewController];
__weak __block ViewController *weakSelf=self;
[self transitionFromViewController:self.currentViewController
toViewController:aNewViewController
duration:1.0
options:UIViewAnimationOptionTransitionCurlUp
animations:nil
completion:^(BOOL finished) {
[aNewViewController didMoveToParentViewController:weakSelf];
[weakSelf.currentViewController willMoveToParentViewController:nil];
[weakSelf.currentViewController removeFromParentViewController];
weakSelf.currentViewController=[aNewViewController autorelease];
}];
}
我在这里发布了一个完整的示例项目: https ://github.com/toolmanGitHub/stackedViewControllers 。这个另一个项目展示了如何UIViewController
在不占据整个屏幕的一些不同的输入 viewController 类型上使用 Containment。祝你好运