作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过减少宽度约束来为 UIView 设置动画,但在使用 UIView.animateKeyFrames
时效果不佳。这是我的代码:
UIView.animateKeyframes(withDuration: 2.0, delay: 0, options: [.calculationModeCubic], animations: {
UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 1.0/2.0, animations: {
self.titleLabel.alpha = 0.0 // works well
})
self.titleSquareHeightConstraint?.constant = 20 // previously 170
UIView.addKeyframe(withRelativeStartTime: 1.0/2.0, relativeDuration: 1.0/2.0, animations: {
self.titleSquare.layoutIfNeeded() // instantaneously jump to 20
})
}, completion:nil)
titleSquare 的高度会瞬间从 170 跳到 20。 注意:titleSquare 是一个 UIView。此外,我曾经使用 UIView.animate
并且下面的代码工作得很好:
self.titleSquareHeightConstraint?.constant = 20
UIView.animate(withDuration: 0.5,
delay: 0,
usingSpringWithDamping: 1,
initialSpringVelocity: 1,
options: .curveEaseIn,
animations: {
self.view.layoutIfNeeded() // Perfectly works
},completion: nil)
我的 UIView.animateKeyframes
方法有什么问题?似乎我不完全了解它是如何工作的?
谢谢
最佳答案
不是很明显或很直观,但是......
您想告诉 View layoutIfNeeded()
:
UIView.animateKeyframes(withDuration: 2.0, delay: 0, options: [.calculationModeCubic], animations: {
UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 1.0/2.0, animations: {
self.titleLabel.alpha = 0.0 // works well
})
self.titleSquareHeightConstraint.constant = 20 // previously 170
UIView.addKeyframe(withRelativeStartTime: 1.0/2.0, relativeDuration: 1.0/2.0, animations: {
// tell self.view to layout, not the titleSquare view
self.view.layoutIfNeeded()
})
}, completion:nil)
关于ios - UIView animateKeyframes 不适用于 NSLayoutConstraints,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53339586/
我是一名优秀的程序员,十分优秀!