применить uipangesture к uitextfield - PullRequest
3 голосов
/ 12 февраля 2020

Мой код swift ниже применяет пэнгестер к текстовому полю, вот и все. Проблема в том, когда я что-то набираю в текстовом поле. Текстовое поле возвращается в исходное положение ограничения. Я просто не хочу, чтобы он возвращался при вводе текста в текстовое поле. Это проблема ограничения. Если я снимаю ограничения, я хочу это. Так что, чтобы увидеть этот эффект, просто скопируйте код в Xcode и примените раскадровки, и вы поймете, что я имею в виду.

import UIKit
class fullScreen : UIViewController {

@IBOutlet var i : UItextField!


var g11 = UIPanGestureRecognizer()

override func viewDidLoad() {

    g11 = UIPanGestureRecognizer(target: self, action: #selector(fullScreen.g1Method))

    i.isUserInteractionEnabled = true

    i.addGestureRecognizer(g11)




}



@objc func g1Method(_ sender: UIPanGestureRecognizer){


let tranistioon = sender.translation(in: self.view)
sender.view!.center = CGPoint(x: sender.view!.center.x + tranistioon.x, y: sender.view!.center.y + tranistioon.y)
sender.setTranslation(CGPoint.zero,in: self.view)    }


}

1 Ответ

0 голосов
/ 16 февраля 2020

Проблема, с которой вы сталкиваетесь, заключается в том, что ограничения Раскадровки остаются активными без изменений в поле 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
        }
    }

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

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