В 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:

Несколько вещей, чтобы рассмотреть здесь:

  1. Вы должны всегда реализовывать все четыре из этих методов, даже если вы ничего не делаете, чтобы предотвратить частичные события, идущие вверх по цепочке респондента (что и делает супер реализация).
  2. Вы не должны называть супер, если вы обрабатываете события.
  3. Если вы вызываете super, потому что хотите отправить события вверх по цепочке респондента, вы должны вызвать правильный метод super (вы вызываете touchesBegan:withEvent: на супер в вашем touchesMoved:withEvent реализация

Чтобы конкретно ответить на ваш вопрос, вы реализуете touchesEnded:withEvent знать, когда пользователь перестал касаться экрана одним или несколькими касаниями, которые являются частью события.

Другие вопросы по тегам