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

时间:2015-07-10 11:31:30

标签: ios objective-c animation uikit modalviewcontroller

问题

我试图以模态方式呈现视图控制器(准确地说是UIImagePickerController),同时在演示之前动画一些视图。

重要的是要注意动画和视图的呈现不是链接的,并且动画和模态呈现图像选择器的视图之间可能存在时间差。

尽管如此,当我呈现视图控制器时,似乎我所在的当前视图的所有子视图(我正在呈现的视图 - 父视图控制器的视图)被重置为他们的原始的“故事板”位置,导致我在视图中完成的所有动画在呈现图像选择器之前重置。

另一件值得注意的事情是,我使用AutoLayout定位我动画的视图。

我添加了一个显示问题的示例动画 - 注意“Animate”按钮在我点击“当前模态视图控制器”按钮之后如何快速回到原始位置(我之前切换过“慢动画”)呈现模态视图控制器,以便您可以看到“动画”按钮快照回来。)

enter image description here

我还添加了动画中显示的示例应用的链接,以便您更深入地检查问题,click here下载它。

答案

为了解决这个问题,我使用了@ kokx的答案,并动画了视图的自动布局约束而不是它们的帧值。为此,我只是为我想要修改的约束创建了出口,并修改了约束的constant属性。

要为更改设置动画,只需调用原始[UIView animateWithDuration:options:animations:completion:],同时通过调用animations:替换任何动态代码[self.view layoutIfNeeded]

1 个答案:

答案 0 :(得分:1)

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

请查看附带的视频,问题已解决。 Video Link

代码如下:

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

由于

相关问题