当用户在屏幕上拖动时,有没有办法让 UITextField 移动?
Is there a way to make a UITextField move when user drags across screen?
我是编码新手,所以我正在尝试 swift 中的一些小项目。现在,我正在尝试在 ViewController 内创建一个文本框,当用户沿着屏幕拖动它时移动它。对于文本框,我目前使用的是 UITextField,但我不知道如何根据拖动对其移动进行编程。
您需要将 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
。由于平移是一个连续的手势,只要有手指移动,我们的方法就会被调用多次。
我是编码新手,所以我正在尝试 swift 中的一些小项目。现在,我正在尝试在 ViewController 内创建一个文本框,当用户沿着屏幕拖动它时移动它。对于文本框,我目前使用的是 UITextField,但我不知道如何根据拖动对其移动进行编程。
您需要将 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
。由于平移是一个连续的手势,只要有手指移动,我们的方法就会被调用多次。