Вы захотите добавить UIPanGestureRecognizer к вашему представлению. Существуют всевозможные встроенные средства распознавания жестов для обнаружения различных жестов, таких как касание или, в данном случае, панорамирование (перетаскивание). Вы можете проверить их здесь: https://developer.apple.com/documentation/uikit/uigesturerecognizer
Здесь мы создадим распознаватель жестов панорамирования и добавим его в наше представление. Предположим, что myView - это ваш UITextField. Хорошее место для этого - метод viewDidLoad () вашего контроллера представления.
let pan = UIPanGestureRecognizer(target: self, action: #selector(handlePan(sender:)))
myView.addGestureRecognizer(pan)
В тот момент, когда ваш палец касается экрана, мы говорим, что последовательность касаний началась. Последовательность касаний заканчивается, когда на экране больше нет пальцев. Жест панорамирования определит, будет ли эта последовательность касания похожа на панорамирование, и если это так, метод handlePan будет вызываться на различных этапах. Здесь сам жест будет передан в метод, который мы используем, чтобы определить перевод и соответственно переместить наше представление. Добавьте это как метод вашего контроллера представления.
@objc func handlePan(sender: UIPanGestureRecognizer) {
let translation = sender.translation(in: sender.view)
self.myView.center.x += translation.x
self.myView.center.y += translation.y
sender.setTranslation(CGPoint.zero, in: sender.view)
}
Первая строка получает перевод в представлении, к которому прикреплен жест (myView). Затем мы корректируем положение myView на основе этого перевода, а затем устанавливаем перевод на ноль. Это сделано для того, чтобы при следующем вызове этого метода перевод был дельтой относительно предыдущего вызова.
Свойство sender.state
сообщит вам состояние, в котором находится жест, например, .began
, .changed
, .ended
. Поскольку панорамирование - это непрерывный жест, наш метод будет вызываться много раз, когда есть движение пальца.