我已经编程了一个条形图,每个条形为UIView
时,其高度受到限制,而超级视图的顶部受到约束。
输入高度值后,应以10秒的持续时间执行动画。
但是,动画不会发生。
我首先计算钢筋的新高度:
let portion = Float(self.currentValue!) / Float(self.maxValue!) // portion of max height of the bar
let newTopConstraint = Float(maxTopConstraint) * portion // the new distance from the top of the superview
var heightDiff = newTopConstraint - Float(self.barTopConstraint.constant)
heightDiff = abs(heightDiff)
现在我获得了条形图的新高度,我想为其设置动画:
UIView.animate(withDuration: 10) {
self.barTopConstraint.constant = newTopConstraint
self.heightCons.constant += heightDiff
self.barView.setNeedsLayout()
}
不幸的是,动画永远不会发生。我的动画怎么了?
答案 0 :(得分:4)
barTopConstraint.constant = newTopConstraint
heightCons.constant += heightDiff
UIView.animate(withDuration: 10, animations: view.layoutIfNeeded)
更新约束时,仅将常数设置为其他值不会更新视图。
要更新视图,请在要为其更新约束的视图上调用layoutIfNeeded()
。
在这种情况下,我在主视图上调用layoutIfNeeded()
,因此每个子视图也会被更新。
将来,如果您要更新约束而没有动画,请在设置常量后立即调用view.layoutIfNeeded()
。要制作动画时,请将layoutIfNeeded
放在UIView.animate
内。