显示呈现部分卷曲的视图控制器

Posted

技术标签:

【中文标题】显示呈现部分卷曲的视图控制器【英文标题】:Show presenting view controller with partial curl 【发布时间】:2013-02-12 13:34:03 【问题描述】:

我有一个带有多个文本字段/文本视图的视图控制器,并希望允许用户使用他们在网络上找到的内容填充这些字段。为此,我以模态方式呈现了不同的 Web 视图。我的问题是我想使用部分页面卷曲来显示第一个视图控制器(带有任何填充信息)。但是,您不能再次显示实时视图控制器,并且新实例不会预先填充文本字段中已放置的任何信息。

似乎我可以来回传递该信息(从第一个实例到第二个视图控制器,然后将信息复制到第二个实例,然后在我关闭第二个实例时复制回来,等等)但是它似乎应该有更好的方法。

我也可以将 Web 视图控制器添加为子视图,但我错过了我非常喜欢的部分卷曲的功能。

谢谢!

【问题讨论】:

见***.com/questions/1681315/partial-page-curl-animation 【参考方案1】:

但是,您不能再次展示实时取景控制器,并且 新实例没有预先填充任何信息 已放置在文本字段中。

您不需要每次都创建一个新的视图控制器。只需将该视图控制器对象存储为实例变量,在用户完成之前不要释放它。

if (myViewController == nil) 
    myViewController = [UIViewController alloc] init];

[self presentViewController:myViewController animated:YES];    

【讨论】:

我试过了,但你得到这个错误:应用程序试图以模态方式呈现一个活动控制器,因为控制器在当前控制器下仍然处于活动状态。 你仍然需要在你的第二个视图控制器上调用dismissViewController。如果你使用 ARC,你的第一个 viewcontroller 仍然会引用第二个 viewcontroller,所以它不会释放它。如果您不使用 ARC,那么请确保即使第二个视图控制器已关闭,您也不要释放它。 但是当你关闭呈现视图控制器时,因为第二个控制器是模态呈现的,所以第二个控制器被关闭。 EG:controller_1 = modal segue => controller_2(谁通过调用 [self.presentingViewControllerdismissViewControllerAnimated:YES completion:nil] 来关闭 controller_1。这会导致只显示 controller1,我们也会收到不平衡的调用来开始/结束外观转换......在调试区。 我的意思是当你回到控制器 1 时你需要关闭控制器 2。【参考方案2】:

所以我把 cmets 和发布的答案结合起来了。

首先:我将 vc 的实例与 web 视图一起存储,并将其视图添加到第一个视图控制器,然后隐藏视图:

self.webVC = [self.storyboard instantiateViewControllerWithIdentifier:@"webView"];
self.webVC.delegate = self;
self.webVC.view.frame = self.view.bounds;
[self.view addSubview:self.webVC.view];

[self.webVC.view didMoveToSuperview];
self.findPoemVC.view.hidden = YES;

然后我在 UIView 上使用了一个类别来展开和卷曲视图。我找到了代码here:

为了显示视图,我执行了一个像这样的 CurlDown 动画:

 self.findPoemVC.view.hidden = NO;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown
                       forView:self.webVC.view
                         cache:YES];

self.webVC.view.hidden = NO;
[UIView commitAnimations];

在 webVC 上,我实现了一个协议并在第一个视图控制器中实现了委托方法:

在 webVC 中:

@protocol PoemFinderDelegate <NSObject>
    -(void)shouldUncurl;
    -(void)doneWasPressed;
@end

委托是较早设置的(见上文),并且在第一个视图控制器中完成了部分取消和完全取消 webview 的委托方法的实现:

-(void)shouldUncurl
    [self.webVC.view animationPartialCurlUp];

-(void)doneWasPressed
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.50];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp
                           forView:self.webVC.view
                             cache:YES];

    self.webVC.view.hidden = YES;
    [UIView commitAnimations];

【讨论】:

以上是关于显示呈现部分卷曲的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何为modalviewcontroller关联整页卷曲动画?

我可以模态地呈现作为导航控制器一部分的视图控制器吗?

在动画呈现控制器视图的同时动画呈现控制器视图

呈现模态视图控制器的延迟

从模态呈现的视图控制器内部呈现 UIPopoverController

在当前显示的视图控制器上呈现 UIWebview