以编程方式创建的动画 NSLayoutConstraint
Posted
技术标签:
【中文标题】以编程方式创建的动画 NSLayoutConstraint【英文标题】:Animate NSLayoutConstraint created programmatically 【发布时间】:2019-09-10 09:45:20 【问题描述】:必须做一些特别的事情来为以编程方式实例化的约束设置动画?
我以编程方式将约束实例化为惰性变量:
private lazy var topConstraint: NSLayoutConstraint =
let constraint = view.topAnchor.constraint(equalTo: otherView.topAnchor, constant: otherView)
return constraint
()
然后,我对这个约束的常数的变化进行动画处理:
topConstraint.constant = newValue
view.setNeedsLayout()
UIView.animate(withDuration: 1)
self.view.layoutIfNeeded()
它不起作用...我也尝试将常量设置放入块中:
UIView.animate(withDuration: 1)
self.topConstraint.constant = newValue
self.view.setNeedsLayout()
self.view.layoutIfNeeded()
但我一无所获,我尝试了几乎所有的组合。约束常量已正确更改,但始终没有动画。
PD:我也给了UIViewPropertyAnimator
一个机会。
【问题讨论】:
How do I animate constraint changes?的可能重复 不,这个问题是问当约束由代码创建时是否有什么特别的事情要做...没有故事板。 首先,您设置constant: otherView
...应该是CGFloat
,而不是对视图的引用。其次,你有没有设置过topConstraint.isActive = true
?
【参考方案1】:
不需要setNeedsLayout()
。
self.topConstraint.constant = 0.0
UIView.animate(withDuration: 1.0) [weak self] in
self?.topConstraint.constant = 10.0
self?.view.layoutIfNeeded()
【讨论】:
我试过了,在这种情况下也不行。 先尝试设置一些硬编码值并检查是否有效。更新了答案。看看它现在是否有效。 不,我尝试了所有应该工作的东西......但是约束更改无法动画 在平移手势识别器的处理程序(选择器)内部。 让我们continue this discussion in chat。以上是关于以编程方式创建的动画 NSLayoutConstraint的主要内容,如果未能解决你的问题,请参考以下文章