扩展中的Swift Animate约束

时间:2019-02-15 05:09:35

标签: swift animation constraints

下面是我用来移动和缩小标签的代码。直到我将其转换为扩展程序,它的工作情况都很好。现在,这些属性可以设置动画,但不能设置约束。我已经多次问过同样的问题,但是解决方案似乎都非常简单,而且都无法正常工作。我试过将约束常量以及layoutIfNeeded()移到动画上方,alpha设置下方,上方和下方...没有运气。

extension UIView {
   func moveLabel(lc: NSLayoutConstraint, hc: NSLayoutConstraint) {
      lc.constant = -1
      hc.constant = 24
      UIView.animate(withDuration: 0.5, delay: 0, options: [.curveEaseInOut], animations: {
         self.transform = CGAffineTransform(scaleX: 0.7, y: 0.7)
         self.alpha = 0.5
         self.layoutIfNeeded()
      }, completion: nil)
   }
}

1 个答案:

答案 0 :(得分:0)

因为您所说的“我用来移动和缩小标签”,我怀疑您的问题是由于您在标签本身上调用self.layoutIfNeeded()会导致在当前视图范围内更新约束,但是移动视图需要布置超级视图。作为测试,您还可以在动画块中包含self.superview?.layoutIfNeeded(),但是,如果您想确定的话,请将标签的监督传递给该函数,然后在该函数上调用layoutIfNeeded()

extension UIView {
    func moveLabel(lc: NSLayoutConstraint, hc: NSLayoutConstraint, superView: UIView) {
      lc.constant = -1
      hc.constant = 24
      UIView.animate(withDuration: 0.5, delay: 0, options: [.curveEaseInOut], animations: {
         self.transform = CGAffineTransform(scaleX: 0.7, y: 0.7)
         self.alpha = 0.5
         self.layoutIfNeeded()
         superView.layoutIfNeeded()
      }, completion: nil)
   }
}

p.s。在您的代码中,您实际上不是在动画约束,这是您的意图吗?