Есть ли способ заставить UITextField двигаться, когда пользователь перемещается по экрану? - PullRequest
0 голосов
/ 06 апреля 2020

Я новичок в программировании, поэтому пробую несколько небольших проектов в короткие сроки. Прямо сейчас я пытаюсь заставить текстовое поле внутри ViewController перемещаться, когда пользователь перетаскивает его по экрану. Для текстового поля я в настоящее время использую UITextField, но я не знаю, как запрограммировать его движение в соответствии с перетаскиванием.

1 Ответ

1 голос
/ 06 апреля 2020

Вы захотите добавить 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. Поскольку панорамирование - это непрерывный жест, наш метод будет вызываться много раз, когда есть движение пальца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...