Проблема, с которой вы сталкиваетесь, заключается в том, что ограничения Раскадровки остаются активными без изменений в поле constant
объекта класса. Вот как это решить:
Я добавил две IBOutlet
ссылки на рассматриваемые ограничения на раскадровке:
@IBOutlet var leadingConstraint: NSLayoutConstraint!
@IBOutlet var topConstraint: NSLayoutConstraint!
Кроме того, прямо под этими ограничениями я добавил ссылку для Происхождение textField выглядит так: var textFieldOrigin = CGPoint.zero
Наконец, я изменил метод распознавания жестов, чтобы различать состояния UIPanGestureRecognizer
. Вот что я сделал:
@objc func g1Method(_ sender: UIPanGestureRecognizer) {
if sender.state == .began {
textFieldOrigin = sender.location(in: i)
} else if sender.state == .ended {
topConstraint.constant = i.frame.origin.y - i.frame.height
leadingConstraint.constant = i.frame.origin.x
topConstraint.isActive = true
leadingConstraint.isActive = true
} else {
let location = sender.location(in: view)
i.frame.origin = CGPoint(x: location.x - textFieldOrigin.x, y: location.y - textFieldOrigin.y)
topConstraint.isActive = false
leadingConstraint.isActive = false
}
}
Ключевыми моментами в этом коде является отключение ограничений, обновление их констант и последующее включение их после завершения распознавания жестов.