В Swift, как я могу проверить, что пользователь больше не касается экрана после срабатывания touchSMoved?
Мне нужно знать, что пользователь начал прикасаться к экрану, а затем знать, когда он больше не прикасается к нему.
С прикосновениями Начал и прикосновениями Закруглился я могу получить такую информацию. Однако, если пользователь проводит пальцами по пальцам, то я знаю, что он начал делать это с помощью touchsMoved.
Однако я не могу проверить, когда он больше не касается экрана. По сути, touchesEnded не будет срабатывать после того, как пользователь перестал свипировать. Есть идеи?
Пример моего кода:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
if let touch = touches.first {
print("Finger touched!")
}
super.touchesBegan(touches, withEvent:event)
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
if let touch = touches.first {
print("Finger is swipping!")
}
super.touchesBegan(touches, withEvent:event)
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
if let touch = touches.first {
print("finger is not touching.") //this will not fire if finger stopped swipping
}
super.touchesBegan(touches, withEvent:event)
}
3 ответа
Работает в Swift 3
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if touches.first != nil {
print("Finger touched!")
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if touches.first != nil {
print("finger is not touching.")
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
if touches.first != nil {
print("Touch Move")
}
}
Вы сказали:
print("finger is not touching.") //this will not fire if finger stopped swipping
Вы правы, что он не будет стрелять, если палец перестал двигаться. Но он срабатывает, если палец покидает экран (перестает касаться), о чем вы и просили ("больше не касаться экрана").
touchesBegan:withEvent:
всегда вызывается для одного или нескольких пальцев, когда они касаются экрана, который считается частью одного и того же события касания. touchesMoved:withEvent:
увольняется, когда один или несколько пальцев в событии двигаются. touchesEnded:withEvent:
быть уволенным, когда один или несколько пальцев в сенсорном событии удалены с экрана. И, наконец, touchesCancelled:withEvent:
вызывается, если все событие признано недействительным (т.е. отменено).
Для данного события вы всегда будете получать один или несколько звонков touchesBegan:withEvent:
, вероятно, много звонков touchesMoved:withEvent
и затем один или несколько звонков touchesEnded:withEvent:
или же touchesCancelled:withEvent:
Несколько вещей, чтобы рассмотреть здесь:
- Вы должны всегда реализовывать все четыре из этих методов, даже если вы ничего не делаете, чтобы предотвратить частичные события, идущие вверх по цепочке респондента (что и делает супер реализация).
- Вы не должны называть супер, если вы обрабатываете события.
- Если вы вызываете super, потому что хотите отправить события вверх по цепочке респондента, вы должны вызвать правильный метод super (вы вызываете
touchesBegan:withEvent:
на супер в вашемtouchesMoved:withEvent
реализация
Чтобы конкретно ответить на ваш вопрос, вы реализуете touchesEnded:withEvent
знать, когда пользователь перестал касаться экрана одним или несколькими касаниями, которые являются частью события.