显示呈现部分卷曲的视图控制器
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关联整页卷曲动画?