我试图以模态方式呈现视图控制器(准确地说是UIImagePickerController),同时在演示之前动画一些视图。
重要的是要注意动画和视图的呈现不是链接的,并且动画和模态呈现图像选择器的视图之间可能存在时间差。
尽管如此,当我呈现视图控制器时,似乎我所在的当前视图的所有子视图(我正在呈现的视图 - 父视图控制器的视图)被重置为他们的原始的“故事板”位置,导致我在视图中完成的所有动画在呈现图像选择器之前重置。
另一件值得注意的事情是,我使用AutoLayout定位我动画的视图。
我添加了一个显示问题的示例动画 - 注意“Animate”按钮在我点击“当前模态视图控制器”按钮之后如何快速回到原始位置(我之前切换过“慢动画”)呈现模态视图控制器,以便您可以看到“动画”按钮快照回来。)
我还添加了动画中显示的示例应用的链接,以便您更深入地检查问题,click here下载它。
为了解决这个问题,我使用了@ kokx的答案,并动画了视图的自动布局约束而不是它们的帧值。为此,我只是为我想要修改的约束创建了出口,并修改了约束的constant
属性。
要为更改设置动画,只需调用原始[UIView animateWithDuration:options:animations:completion:]
,同时通过调用animations:
替换任何动态代码[self.view layoutIfNeeded]
。
答案 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];
由于