【问题标题】:Presenting a View Controller Modally Resets The Current View以模态方式呈现视图控制器会重置当前视图
【发布时间】:2015-07-10 11:31:30
【问题描述】:

问题

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

请务必注意,动画和视图的呈现不是链式的,在动画视图和模态呈现图像选择器之间可能存在时间间隔。

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

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

我添加了一个示例动画来显示问题 - 请注意在我单击“当前模态视图控制器”按钮后“动画”按钮如何立即恢复到原来的位置(我之前已经切换了“慢速动画”呈现模态视图控制器,以便您可以看到“动画”按钮弹回)。

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

回答

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

要为更改设置动画,只需调用原始[UIView animateWithDuration:options:animations:completion:],同时将animations: 部分的任何动画代码替换为对[self.view layoutIfNeeded] 的调用。

【问题讨论】:

    标签: ios objective-c animation uikit modalviewcontroller


    【解决方案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];
    

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      相关资源
      最近更新 更多