uistackview“跳转”中安排好的子视图中的动画

时间:2019-05-01 13:01:45

标签: ios swift animation uistackview

我有一个水平的UIStackView,其中包含几个排列的子视图。

我想在用户单击按钮时删除一个排列的子视图(我们称其为A),但在此之前我想做一个快速动画。我想制作自己的动画,所以我不能只动画stackView.removeArrangedSubview来制作默认的基本动画,而不能制作我想要的特殊动画。

在A内,我有另一个视图(称为B),它使用“自动版式”进行居中X和居中Y。

当我将我的splittedSubview A的A.widthAnchor.constant动画化为0时,其他arrangedsubviews逐渐代替它,子项B在将其CenterX动画化之前就丢失了,并向左移动。也许它不会丢失centerX,但它会在一个很小的A(宽度= 0,从左侧开始)上居中X,但是A不应立即将其宽度设置为0,而应在动画完成后将其宽度设置为0。

我尽力解释清楚,但我知道这可能会造成混淆。这是显示问题的视频。动画开始前,图像{B)位于左侧的arrangedsubview A(占据所有屏幕)中。

https://drive.google.com/open?id=1nTDRe5zirbuQi86WVBTuU-iDU8aq0lcw

这是制作此动画的非常简单的代码:

   UIView.animate(withDuration:4,delay:0, options:.curveEaseInOut, animations : {

        self.c.constant = 0 // c is A.widthAnchor constraint
        self.stackView.layoutIfNeeded()

    },completion: { _ in
        // done
    })

1 个答案:

答案 0 :(得分:0)

我发现自己: 实际上,问题是当我这样做

Stackview.layoutIfNeeded()

stackview内的内容可以动画,但是stackview本身不可以。因此,stackview在动画开始之前已更新其宽度。 我只是更改为

superviewThatContainTheStackView.layoutIfNeeded()

现在一切正常:)