切换视图控制器时uiview重复

时间:2013-04-15 15:03:23

标签: ios ipad uiview uiviewcontroller isgl3d

我有2个ViewControllers,我使用App委托根据用户交互切换它们。

在AppDelegate.m中

我有:

    - (void) switchViews
{
    if (_viewController.view.superview == nil) {
        [_window addSubview:_viewController.view];
        [_window bringSubviewToFront:_viewController.view];
        [viewController2.view removeFromSuperview];
    } else
    {
        [_window addSubview:_viewController2.view];
        [_window bringSubviewToFront:_viewController2.view];

        [_viewController.view removeFromSuperview];
    } 
}

_viewController用于主视图,_viewController2用于glview(我使用的是isgl3d)。交换机工作,但每次我切换回glview,我看到顶部的重复视图,我怀疑即使主视图也是重复的。

任何想法如何完全删除视图以便我没有这个问题?谢谢!

2 个答案:

答案 0 :(得分:2)

您不应该添加和删除这样的视图,只需更改哪个控制器是窗口的根视图控制器。这样做会使新控制器的视图成为窗口的子视图,并删除旧控制器的视图。

if ([self.window.rootViewController isEqual: _viewController]) {
    self.window.rootViewController = viewController2;
}else{
    self.window.rootViewController = viewController;

答案 1 :(得分:0)

在看完斯坦福编码后,我发现了如何做到这一点:IOS。

我不知道VC的一些关键信息: 每次VC实例化时,都会调用viewDidLoad一次来设置所有重要的东西,如outlet等。然后,在视图交换之间将调用viewWillAppearviewWillDisappear。因为在向用户显示视图之前只调用它,所以在此处设置所有几何设置,如视图方向和大小。

所以我所做的是: 我addSubview viewDidLoadviewWillappearviewWillDisappear中的所有正在运行的设置。

还有一个注意事项:只要应用仍在运行,视图就会保留在那里。

无论如何,谢谢rdelmar的帮助。