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

我试图呈现视图控制器模式(一个UIImagePickerController是准确的),而animation演示之前的一些意见。

重要的是要注意animation和视图的呈现没有链接,animation和模式呈现图像select器的视图之间可能存在时间差。

尽pipe如此,当我呈现视图控制器时,似乎我所处的当前视图的所有子视图(我从父视图控制器的视图呈现的视图)正在重置为原始的“情节图板“位置,这会导致我在呈现图像select器重置之前在视图中完成的所有animation。

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

我已经添加了一个示例animation来显示这个问题 – 注意在点击“Present Modal View Controller”button之后,“Animate”button如何回到原来的位置(我已经在呈现模态之前切换了“Slow Animations”视图控制器,所以你可以看到“animation”button回来)。

在这里输入图像说明

我还添加了animation中显示的示例应用程序的链接,以便更深入地检查问题, 请单击此处下载它。

回答

为了解决这个问题,我使用@ kokx的答案,并animation视图的自动布局约束,而不是他们的帧值。 为了做到这一点,我简单地为我想要修改的约束创build出口,并修改约束的constant属性。

要更改animation效果,只需调用原始[UIView animateWithDuration:options:animations:completion:]同时replaceanimation代码animations:一部分,调用[self.view layoutIfNeeded]

要解决这个问题,你需要使用NSLayoutConstraint以及改变约束而不是改变框架。

请检查附加的video,问题解决。 video链接

代码如下:

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

谢谢