【发布时间】:2016-03-06 14:52:38
【问题描述】:
UIStackView 使得使用 UIView 的 hidden 属性创建漂亮的动画变得非常容易。我有两个UIStackViews,每个UILabels 在arrangedSubviews 中,当我将一个新的UILabel 添加到UIStackView 时,它应该在正确的索引处显示标签的动画,推动标签上面和下面。
这个效果用UIStackViews很容易做到:
descriptionLabel.hidden = true
let count = descriptionStack.arrangedSubviews.count
descriptionStack.insertArrangedSubview(expenseLabel.descriptionLabel, atIndex: count - 1)
UIView.animateWithDuration(0.5) {
descriptionLabel.hidden = false
}
我想同时为两个不同的UIStackViews 执行此效果,但这会导致一些奇怪的行为,其中一个动画正确,而另一个从视图顶部下降。
假设上面的代码可以为其他一些视图重复并创建相同的动画:
descriptionLabel.hidden = true
costLabel.hidden = true
let count = descriptionStack.arrangedSubviews.count
descriptionStack.insertArrangedSubview(expenseLabel.descriptionLabel, atIndex: count - 1)
costStack.insertArrangedSubview(expenseLabel.costLabel, atIndex: count - 1)
UIView.animateWithDuration(0.5) {
descriptionLabel.hidden = false
UIView.animateWithDuration(0.5) {
costLabel.hidden = false
}
}
在此示例中,costLabel 的动画效果正确,而descriptionLabel 从UIStackView 的顶部下降。颠倒顺序会导致costLabel 插入,descriptionLabel 正确设置动画。
我已经尝试过这个动画代码的变体,例如不嵌套动画并使用UIView.animateKeyframesWithDuration。
如下所示,costLabel 插入,descriptionLabel 正确设置动画:
UIView.animateWithDuration(0.5) {
descriptionLabel.hidden = false
}
UIView.animateWithDuration(0.5) {
costLabel.hidden = false
}
我无法弄清楚为什么动画总是彼此不同。如何同时为两个标签设置动画,并在它们出现在正确索引处产生效果,将标签推到上方和下方?
【问题讨论】:
标签: ios animation uistackview animatewithduration