我会使用自定义容器视图控制器。因此,在您的主要场景中,添加一个“容器视图”。如果您的目标是 iOS6,那么在编辑情节提要时会有一个特殊的“容器视图”对象,您现在可以将其拖到自定义容器视图控制器的场景中:
如果是 iOS 5,那么 (a) 您必须手动创建第一个子场景;(b) 给它一个唯一的故事板 ID(在我的示例中InitialChild
,和 (c) 您手动实例化第一个子控制器并以编程方式将其添加为子控制器。因此,假设您在自定义容器视图控制器的场景中有一个UIView
调用containerView
,您可以有这样的方法:
- (void)addInitialChild
{
UIViewController *child = [self.storyboard instantiateViewControllerWithIdentifier:@"InitialChild"];
[self addChildViewController:child];
child.view.frame = self.containerView.bounds;
[self.containerView addSubview:child.view];
[child didMoveToParentViewController:self];
}
当您想过渡到下一个场景时,将您自己的子类化UIStoryboardSegue
:
在 ReplaceSegue.h 中:
@interface ReplaceSegue : UIStoryboardSegue
@end
在 ReplaceSegue.m
@implementation ReplaceSegue
- (void)perform
{
UIViewController *source = self.sourceViewController;
UIViewController *destination = self.destinationViewController;
UIViewController *container = source.parentViewController;
[container addChildViewController:destination];
destination.view.frame = source.view.frame;
[source willMoveToParentViewController:nil];
[container transitionFromViewController:source
toViewController:destination
duration:0.5
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
}
completion:^(BOOL finished) {
[source removeFromParentViewController];
[destination didMoveToParentViewController:container];
}];
}
@end
然后,当从第一个包含的场景到下一个场景进行转场时,指定一个“自定义”转场,并使用这个“ReplaceSegue”作为类(只需单击转场将其选中,然后查看“属性检查器”) .
生成的故事板可能如下所示(注意{}
各个子项之间的“ ”名称):
参考: