Swift Animate Constraint的扩展

问题描述 投票:0回答:1

下面是我用来移动和缩小标签的代码。它工作正常,直到我把它变成一个扩展。现在属性动画但不是约束。我已经多次看过同样的问题,但解决方案看起来都非常简单,没有一个正在运作。我已经尝试移动约束常量以及动画上方的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)
   }
}
swift animation constraints
1个回答
0
投票

因为你的说法“我用来移动和缩小标签”我怀疑你的问题是因为你在标签本身上调用self.layoutIfNeeded(),这将更新当前视图范围内的约束,但是移动视图需要superview来布局作为测试,您还可以在动画块中包含self.superview?.layoutIfNeeded(),但如果您想确定,请将标签的superview传递给该函数并在其上调用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)
   }
}

附:在你的代码中,你实际上没有动画约束,这是你的意图吗?

© www.soinside.com 2019 - 2024. All rights reserved.