1

这 4 个文件与这篇文章相关:

FirstViewController 有一个按钮(不在导航栏上,是一个单独的按钮),当按下它时,页面应该会卷曲呈现 FilterViewController。

第一视图控制器.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。

过滤器视图控制器.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

谢谢。

4

2 回答 2

3

我注意到的一件事是您正在推送一个视图控制器,然后使用语法“返回”推送另一个视图控制器。这可能是问题所在:导航堆栈是堆栈。如果您从视图 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];
}
于 2013-04-15T15:33:07.127 回答
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/

或者

https://gist.github.com/jeksys/1507490

于 2013-04-16T12:41:50.540 回答