繁体   English   中英

呈现视图控制器以模态重置当前视图

[英]Presenting a View Controller Modally Resets The Current View

我正在尝试以模态方式呈现视图控制器(准确地说是一个UIImagePickerController),同时在呈现之前对一些视图进行动画处理。

重要的是要注意,动画和视图的表示没有链接在一起,并且在动画和模态呈现图像选择器的视图之间可能存在时间间隔。

话虽如此,当我展示视图控制器时,似乎我所在的当前视图的所有子视图(我正在展示的视图-父视图控制器的视图)都被重置为其原始的“ storyboard” ”位置,这会导致我在呈现图像选择器之前重置视图中所做的所有动画。

另一点值得注意,是我使用AutoLayout来放置我设置动画的视图。

我添加了一个演示该问题的动画示例-注意在单击“当前模态视图控制器”按钮后,“动画”按钮是如何捕捉回到其原始位置的(在显示模态之前,我已经切换了“慢速动画”视图控制器,以便您可以看到“动画”按钮的回弹)。

在此处输入图片说明

我还在动画中显示的示例应用程序中添加了链接,以便您更深入地研究问题, 请单击此处下载它。

回答

为了解决该问题,我使用了@kokx的答案,并对视图的“自动布局”约束(而不是其帧值)进行了动画处理。 为此,我只是为要修改的约束创建了出口,并修改了约束的constant属性。

要对更改进行动画处理,只需调用原始的[UIView animateWithDuration:options:animations:completion:]同时替换其动画的任何动画代码animations:调用[self.view layoutIfNeeded]

要解决该问题,您需要使用NSLayoutConstraint以及更改Constraint而不是更改框架。

请查看附件中已解决问题的视频。 影片连结

代码如下:

 self.topcons.constant = self.topcons.constant - 220;
[UIView animateWithDuration:0.4f
                      delay:0.0f
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^{
                     [self.view layoutIfNeeded];
                 } completion:nil];

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM