Быстрое ограничение анимации в расширении - PullRequest
0 голосов
/ 15 февраля 2019

Ниже приведен код, который я использую для перемещения и сжатия меток.Он работал нормально, пока я не превратил его в расширение.Теперь свойства анимируются, но не ограничения.Я видел, как один и тот же вопрос задавался несколько раз, но решения кажутся довольно простыми, и ни одно из них не работает.Я попытался переместить константы ограничения, а также layoutIfNeeded () выше анимации, ниже настройки альфа, выше и ниже ... не повезло.

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 голосов
/ 15 февраля 2019

Поскольку вы говорите: «Я использую для перемещения и сжатия меток», я подозреваю, что ваша проблема возникает из-за того, что вы вызываете 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)
   }
}

psв вашем коде вы фактически не анимируете ограничения, это ваше намерение?

...