在我的应用程序中,我尝试切换视图,每个视图都是他们自己的XIB,同时使用自定义动画。我创建了一个基本视图控制器作为父视图来保存所有代码,但我似乎无法让它工作。
我为我的应用程序和界面构建器中的所有视图控制器创建了一个IBOutlet,我将插座连接到适当的控制器。每个控制器也加载适当的XIB,所以这都不是问题所在。问题是以下更改视图代码。
这是我的代码:
-(void)changeViews {
CGRect frame = self.view.frame;
frame.origin.x = CGRectGetMaxX(frame);
theView4.view.frame = frame;
[self.view addSubview:theView4.view];
[self addChildViewController:theView4];
[self transitionFromViewController:theView1
toViewController:theView4
duration:1
options:UIViewAnimationOptionTransitionNone
animations: ^{
CGRect frame = self.view.frame;
theView4.view.frame = frame;
frame.origin.x -= frame.size.width;
self.view.frame = frame;
}
completion:completion:nil];
这就是控制台崩溃:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Children view controllers <MyGameViewController: 0x1dd25210> and <Settings: 0x1dd249d0> must have a common parent view controller when calling -[UIViewController transitionFromViewController:toViewController:duration:options:animations:completion:]'
有谁知道如何解决这个问题?
谢谢!
答案 0 :(得分:5)
您可以使用:
使用
addChildViewController:
添加子视图时 控制器到周围的一个。您还必须通知孩子 控制器didMoveToViewController:
已经放入 另一个控制器你也可以使用transitionFromViewController:toViewController:
交换一个视图 控制器为另一个,可选择给动画。
这取自here(我建议你完全阅读已接受的答案)。
长话短说,你还需要告知它确实进入了父视图控制器。