我将尝试用一个简单的例子来解释我的问题。我有一个带有顶部约束和高度约束的UIView。我尝试设置高度约束的增加动画。这有两种方法。
// case 1
heightConstraint.constant += 100
UIView.animate(withDuration: 0.8, delay: 0.0, usingSpringWithDamping: 0.8, initialSpringVelocity: 25.0, options: [], animations: {
self.view.layoutIfNeeded()
}, completion: nil)
// case 2
heightConstraint.constant += 100
let timingParams = UISpringTimingParameters(dampingRatio: 0.8, initialVelocity: CGVector(dx: 0, dy: 25.0))
let animator = UIViewPropertyAnimator(duration: 0.8, timingParameters: timingParams)
animator.addAnimations {
self.view.layoutIfNeeded()
}
animator.startAnimation()
对于案例1,动画按预期执行。但是,对于案例2,动画忽略了我为UIView设置的固定顶部约束。它首先使用初始速度在视图上执行平移,在速度达到0后,它开始相对于其中心缩放UIView。
有人可以告诉我我错过了什么吗?