uistackview 中排列的子视图内的动画 "jumps"
Animation within arranged subview in uistackview "jumps"
我有一个水平的 UIStackView,其中包含几个排列好的子视图。
我想在用户单击按钮时删除一个排列的子视图(我们称之为 A),但在此之前我想做一个快速动画。我想做我自己的动画,所以我不能只制作 stackView.removeArrangedSubview
的动画,它会做默认的基本动画,而不是我想要的特殊动画。
在 A 中,我有另一个视图(我们称之为 B),它是使用自动布局的 centeredX 和 centeredY。
当我将 arrangedSubview A 的 A.widthAnchor.constant 设置为 0 时,其他 arrangedsubviews
逐渐取代它,子 B 在动画之前失去其 CenterX 并转到左边。或者它可能不会丢失 centerX,但它在一个微小的 A 上以 centeredX 为中心(宽度 = 0,并从左侧开始),但 A 不应该立即将其宽度设置为 0,而是在动画完成后.. .
我尽我所能解释清楚,但我知道这可能会造成混淆。这是显示问题的视频。图像 (B),在动画开始前位于左侧 arrangedsubview
A(占据所有屏幕)"jumps"。
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
})
我发现自己:
实际上,问题是当我
Stackview.layoutIfNeeded()
stackview 内部的内容可以设置动画,但 stackview 本身不能。所以 stackview 在动画开始之前更新了它的宽度。
我刚改成
superviewThatContainTheStackView.layoutIfNeeded()
所以现在一切正常:)
我有一个水平的 UIStackView,其中包含几个排列好的子视图。
我想在用户单击按钮时删除一个排列的子视图(我们称之为 A),但在此之前我想做一个快速动画。我想做我自己的动画,所以我不能只制作 stackView.removeArrangedSubview
的动画,它会做默认的基本动画,而不是我想要的特殊动画。
在 A 中,我有另一个视图(我们称之为 B),它是使用自动布局的 centeredX 和 centeredY。
当我将 arrangedSubview A 的 A.widthAnchor.constant 设置为 0 时,其他 arrangedsubviews
逐渐取代它,子 B 在动画之前失去其 CenterX 并转到左边。或者它可能不会丢失 centerX,但它在一个微小的 A 上以 centeredX 为中心(宽度 = 0,并从左侧开始),但 A 不应该立即将其宽度设置为 0,而是在动画完成后.. .
我尽我所能解释清楚,但我知道这可能会造成混淆。这是显示问题的视频。图像 (B),在动画开始前位于左侧 arrangedsubview
A(占据所有屏幕)"jumps"。
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
})
我发现自己: 实际上,问题是当我
Stackview.layoutIfNeeded()
stackview 内部的内容可以设置动画,但 stackview 本身不能。所以 stackview 在动画开始之前更新了它的宽度。 我刚改成
superviewThatContainTheStackView.layoutIfNeeded()
所以现在一切正常:)