呈现视图控制器模式重置当前视图
题
我试图呈现视图控制器模式(一个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];
谢谢