自从我开始学习iOS程序(2012年2月)以来,我一直在研究这个问题。我在这里看了很多帖子似乎都在问同样的问题,我试图将答案应用到我的应用程序中无济于事。我确信我错过了一些简单的事情。
我有一个视图切换测试应用程序。有三种观点:橙色,蓝色,黄色。它从带有两个按钮的橙色视图开始 - 切换到蓝色视图并切换到黄色视图。当我点击切换到黄色视图时 - 视图将在白色背景下旋转。黄色视图还有两个按钮 - 切换到橙色视图并切换到蓝色视图。当我单击切换到橙色视图时,视图会向后翻转,但橙色视图不是白色背景,而是背景。如何让橙色视图不在那里?
这是我用来进行转换的代码:
-(IBAction)switchToYellowView:(id)sender {
YellowViewController *myViewController = [[YellowViewController alloc]
initWithNibName:@"YellowViewController"
bundle:nil];
[UIView beginAnimations:@"flipview" context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
forView:self.view cache:YES];
[self.view addSubview:myViewController.view];
[UIView commitAnimations];
}
根据我的阅读,我认为我需要从superview中删除橙色视图。但是当我使用
时[OrangeViewController.view removeFromSuperView]
我收到错误消息“在对象OrangeViewController上找不到属性视图。”
如果我从黄色视图切换到蓝色视图,橙色视图仍在后台。然后从蓝色切换回橙色,黄色仍然在后台。
我在其他地方读到,我还需要通过添加
来释放这些视图[myViewController release]
我提交动画后。我认为使用ARC(我正在使用)时这是不必要的。当我这样做时,尝试返回橙色视图会导致Bad Access崩溃。
也许我需要用rootViewController做些什么?我确实将OrangeView设置为app delegate.m中的“window”子视图:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
// Add the view controller's view to the window and display.
[self.window addSubview:viewController2.view];
[self.window makeKeyAndVisible];
return YES;
}
viewController2是指向OrangeViewController的指针。
由于第一个评论,我开始四处寻找切换rootViewController - 并找到Ken Anderson的关于以编程方式切换rootviewcontroller的讲义。我可以让黄色改变,但它不是动画。
接下来的两条评论引领我走向其他方向 - 最好的方法是使用容器控制器 - 比如UITabBarController?除了使用我自己的按钮,从不显示标签栏?
我当然可以提供整个申请细读。提前谢谢!
答案 0 :(得分:1)
尝试使用:
[self transitionFromViewController:currentViewController toViewController:firstViewNav duration: options: animations:^{
} completion:^(BOOL finished){
}];
答案 1 :(得分:0)
在switchToYellowView:中,您将黄色视图添加为当前视图的子视图,即橙色视图。因此,如果您尝试使用[OrangeViewController.view removeFromSuperView]删除橙色视图(由于视图不是OrangeViewController的公共属性,可能无法正常工作),那么您将删除具有黄色视图的橙色视图作为子视图,有效地从窗口中删除。我认为你想在switchToYellowView中做的事情是这样的:
[self.view removeFromSuperview]; //remove the orange view
[window addSubview:myViewController.view]; //replace it with the yellow view