1

几乎自从我开始学习为 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?除了使用我自己的按钮并且从不显示标签栏?

当然,我可以提供整个应用程序以供阅读。先感谢您!

4

2 回答 2

1

Try to use:

[self transitionFromViewController:currentViewController toViewController:firstViewNav duration: options: animations:^{
        } completion:^(BOOL finished){

        }];
于 2012-04-22T05:02:47.133 回答
0

在 switchToYellowView: 中,您将黄色视图添加为当前视图的子视图,即橙色视图。因此,如果您尝试使用 [OrangeViewController.view removeFromSuperView] 删除橙色视图(这可能不起作用,因为视图不是 OrangeViewController 的公共属性),那么您将删除具有黄色视图的橙色视图子视图,有效地从窗口中删除两者。我认为你想在 switchToYellowView 里面做的是这样的:

[self.view removeFromSuperview]; //remove the orange view
[window addSubview:myViewController.view]; //replace it with the yellow view
于 2012-04-21T22:01:52.593 回答