我有一个水平的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
})
答案 0 :(得分:0)
我发现自己: 实际上,问题是当我这样做
Stackview.layoutIfNeeded()
stackview内的内容可以动画,但是stackview本身不可以。因此,stackview在动画开始之前已更新其宽度。 我只是更改为
superviewThatContainTheStackView.layoutIfNeeded()
现在一切正常:)