这4个文件与此帖相关:
FirstViewController有一个按钮(不在导航栏上,一个单独的按钮),当按下它时,页面应该卷起来呈现FilterViewController。
FirstViewController.h
- (IBAction)searchOptions:(id)sender;
FirstViewController.m:
- (IBAction)searchOptions:(id)sender {
FilterViewController *ctrl = [[FilterViewController alloc] initWithNibName:@"FilterViewController" bundle:nil];
[UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:nil];
[self.navigationController pushViewController:ctrl animated:NO];
}
在FilterViewController上它有一些UI东西,你按一个按钮,它保存UI的东西,然后页面向下卷曲以显示FirstViewController。
FilterViewController.h:
- (IBAction)backToMap:(id)sender;
FilterViewController.m:
- (IBAction)backToMap:(id)sender {
FirstViewController *ctrl = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlDown completion:nil];
[self.navigationController popViewControllerAnimated:YES];
}
这里的问题是保留UIView。我怎样才能保留UIView?
当我单击FirstViewController上的按钮时,动画工作并显示页面。但是在FilterViewController上单击按钮时,它会崩溃到调试器,并显示错误:
EXC_BAD_ACCESS(代码= 2,地址= 0x8中)
在输出控制台中,它显示:(lldb)
页面卷曲之后我有一个步进器,当我点击步进器时,我在调试器中得到了同样的错误。
更新:我已跟踪内存位置错误:http://i.imgur.com/dL18H9Z.png
感谢。
答案 0 :(得分:3)
我注意到的一件事是你正在推动一个视图控制器,然后使用语法“back”推送另一个视图控制器。这可能是问题:导航堆栈是堆栈。如果从视图0开始,请按视图1,如果要返回查看0,则“弹出”视图1,而不是再次按视图0。
所以:
- (IBAction)backToMap:(id)sender {
FirstViewController *ctrl = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlDown completion:nil];
[self.navigationController popViewControllerAnimated:YES];
}
答案 1 :(得分:0)
这里的问题是您尝试使用UIView的转换方法在视图控制器之间制作动画。
根据文件:
fromView
The starting view for the transition. By default, this view is removed
from its superview as part of the transition.
toView
The ending view for the transition. By default, this view is added
to the superview of fromView as part of the transition.
所以,当你调用这个方法时,你的ViewController的视图被另一个带有动画的视图所取代,并且在堆栈之后放置了下一个没有动画的ViewController,所以它看起来没问题(但是你的第一个控制器的视图已经被替换了)。
但是当你尝试返回时会发生一些错误行为 - 你将替换控制器的视图,这将被删除。
所以,我想说,我必须更加谨慎地完成,有几种不同的方法可以在viewControllers之间进行自定义转换。
例如,您可以观看下一个解决方案(与您的解决方案类似) - http://www.vigorouscoding.com/2011/05/custom-uiviewcontroller-transitions/
或