为了更好地理解以下问题,这里有一个小图,说明了我的应用程序的结构:http://grab.by/6jXh
所以,基本上我有一个基于导航的应用程序,它使用NavigationController的“pushViewController”方法来显示视图A和B.
我想要完成的是从视图A转换到视图B,反之亦然。 例如,用户按下主视图中的“A”按钮,使用NavigationController按下视图A.在该视图中,用户可以按下“翻转到B”按钮,并且视图B替换NavigationController堆栈上的视图A(在视觉上,这是使用翻转过渡完成的)。如果用户按下视图B上的“后退”按钮,则会再次显示主视图。 要节省已用内存,必须取消分配/卸载/删除当前未显示的视图(控制器)。
这样做的恰当方法是什么?我需要某种ContainerViewController,还是可以不用?
感谢。
答案 0 :(得分: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 - 这几乎就是你要找的东西。