动画UIView的兄弟会立即进入最终位置

时间:2015-09-07 08:23:16

标签: ios autolayout ios-autolayout ios-animations

我使用AutoLayout显示了3个UIView。

  1. UILabel
  2. 用于浏览日历的UIView。这个视图是一个包含UIView的自定义UIView,它又包含两个UIButtons和几个UILabels
  3. 任命的UiTableView
  4. View 2有一个约束,它将Top Equal定位到View 1的Bottom 视图3有一个约束,它将Top Equal定位到View 2的Bottom

    非常简单的东西,下面是一张图片,显示了视图2上的常量约束动画。

    enter image description here

    问题在于View 3立即占据了最终位置。为什么在动画期间它不会停留在视图底部2?

    黑色空间是无色区域,最终将由当前的动画视图2填充

    我正在使用Monotouch,执行动画的代码是

    // calendarDateBrowseYConstraint Is View 2
    this.calendarDateBrowseYConstraint.Constant = value;
    
    UIView.Animate(
        5.25f,
        0.0f,
        UIViewAnimationOptions.TransitionFlipFromBottom,
        () =>
        {
            this.calendarDateBrowse.LayoutIfNeeded();
        },
        null);
    

2 个答案:

答案 0 :(得分:4)

请确保在容器视图中调用LayoutIfNeeded()布局。你没有提到你的视图层次结构,但我认为你有类似的东西:

ViewController:
-view
---myContainerView
------label
------viewWithCalendar
------viewWithTableViewOrTableView

调用动画的正确方法是否正确(首先是简单动画):

this.calendarDateBrowseYConstraint.Constant = value;
UIView.animateWithDuration(durationTime) {
    myContainerView.layoutIfNeeded()
}

你的:

this.calendarDateBrowseYConstraint.Constant = value; UIView.Animate(
    5.25f,
    0.0f,
    UIViewAnimationOptions.TransitionFlipFromBottom,
    () =>
    {
        myContainerView.LayoutIfNeeded();
    },
    null);

答案 1 :(得分:0)

LayoutIfNeeded()中引用主视图&确保动画没有在后台执行。