Jer*_*kar 1 animation ios swift uistackview
我有一个水平 UIStackView 包含几个排列的子视图。
当用户单击按钮时,我想删除一个已排列的子视图(我们称之为 A),但在此之前我想做一个快速动画。我想做我自己的动画,所以我不能只stackView.removeArrangedSubview制作默认基本动画的动画,而不是我想要的特殊动画。
在 A 中,我有另一个视图(我们称之为 B),它是使用自动布局的 centeredX 和 centeredY 。
当我将安排的子视图 A 的 A.widthAnchor.constant 设置为 0 时,其他视图arrangedsubviews逐渐取代它,子视图 B 在动画之前丢失其 CenterX 并向左移动。或者也许它不会失去centerX,但它是在一个小A上的centeredX(其宽度= 0,并从左侧开始),但A不应该立即将其宽度设置为0,而是在动画完成之后.. 。
我尽力解释清楚,但我知道这可能会令人困惑。这是显示问题的视频。A中的图像 (B) arrangedsubview(占据整个屏幕)在动画开始之前“跳”到左侧。
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
})
Run Code Online (Sandbox Code Playgroud)
我发现自己:实际上,问题是当我这样做时
Stackview.layoutIfNeeded()
Run Code Online (Sandbox Code Playgroud)
stackview 内部的内容可以进行动画处理,但 stackview 本身不能进行动画处理。因此 stackview 在动画开始之前更新了它的宽度。我刚刚更改为
superviewThatContainTheStackView.layoutIfNeeded()
Run Code Online (Sandbox Code Playgroud)
所以现在一切正常了:)
| 归档时间: |
|
| 查看次数: |
1409 次 |
| 最近记录: |