2

为了更好地理解以下问题,这里有一张小图说明了我的应用程序的结构:http: //grab.by/6jXh

所以,基本上我有一个基于导航的应用程序,它使用 NavigationController 的“pushViewController”方法来显示视图 A 和 B。

我想要完成的是从视图 A 到视图 B 的转换,反之亦然。例如,用户在主视图中按下“A”按钮,使用 NavigationController 推送视图 A。在这个视图中,用户可以按下一个按钮“翻转到 B”,视图 B 将替换 NavigationController 堆栈上的视图 A(视觉上,这是使用翻转转换完成的)。如果用户按下视图 B 上的“后退”按钮,则再次显示主视图。为了节省使用的内存,当前未显示的视图(控制器)必须被释放/卸载/删除。

这样做的适当方法是什么?我需要某种 ContainerViewController 还是可以不用?

谢谢。

4

1 回答 1

0

您可以创建一个 ContainerViewController 类,然后像这样推送它:

ContainerViewController *containerViewController = [[ContainerViewController alloc] initWithFrontView: YES];
[self.navigationController pushViewController: containerViewController animated: YES];
[containerViewController release];

类可能看起来像这样:(因为您可以在顶部使用前视图或后视图来推动它)

- (id)initWithFrontView: (BOOL) frontViewVisible {
    if (self = [super init]) {
        frontViewIsVisible = frontViewVisible;

        viewA = [[UIView alloc] init];
        viewB = [[UIView alloc] init];

        if (frontViewIsVisible) {
            [self.view addSubview: viewA];
        }
        else {
            [self.view addSubview: viewB];
        }


        //add a button that responds to @selector(flipCurrentView:)
    }
    return self;
}

- (void) flipCurrentView: (id) sender {
       [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.75];
        [UIView setAnimationDelegate:self];

        if (frontViewIsVisible == YES) {
            [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView: self.view cache:YES];
            [viewA removeFromSuperview];
            [self.view addSubview: viewB];
        } else {
            [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView: self.view cache:YES];
            [viewB removeFromSuperview];
            [self.view addSubview: viewA];
        }

        [UIView commitAnimations];

        frontViewIsVisible =! frontViewIsVisible;
    }

并且不要忘记照顾内存管理。我还建议您查看http://developer.apple.com/library/ios/#samplecode/TheElements/Introduction/Intro.html - 这几乎正是您正在寻找的。

于 2011-03-12T16:18:49.327 回答