几乎自从我开始学习为 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];
}
根据我的阅读,我认为我需要从超级视图中删除橙色视图。但是当我使用
[OrangeViewController.view removeFromSuperView]
我收到一条错误消息,提示“在对象 OrangeViewController 上找不到属性视图”。
如果我从黄色视图切换到蓝色视图,橙色视图仍在背景中。然后从蓝色切换回橙色,黄色仍然在背景中。
我在其他地方读到,我还需要通过添加来发布这些视图
[myViewController release]
在我提交动画之后。我认为在使用 ARC(我正在使用)时这是不必要的。当我这样做时,试图返回橙色视图会导致 Bad Access 崩溃。
也许我需要对 rootViewController 做点什么?我确实在应用程序 delegate.m 中将 OrangeView 设置为“窗口”的子视图:
- (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?除了使用我自己的按钮并且从不显示标签栏?
当然,我可以提供整个应用程序以供阅读。先感谢您!