在Swift中,如何在触发touchesMoved后检查用户是否不再触摸屏幕?

时间:2015-10-23 21:10:05

标签: swift touchesmoved

我需要知道用户已经开始触摸屏幕然后知道他什么时候不再触摸它了。

使用 touchesBegan touchesEnded ,我可以获得此类信息。但是,如果用户正在滑动他的手指,那么我知道他开始使用 touchesMoved 进行操作。
但是我无法检查他何时不再触摸屏幕。 基本上,用户停止播放后, 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 个答案:

答案 0 :(得分:2)

你说:

print("finger is not touching.") //this will not fire if finger stopped swipping

如果手指停止移动,它就不会触发。但如果手指离开屏幕(停止触摸), ,这就是你所问的(“不再触摸屏幕”)。

答案 1 :(得分:2)

在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")
    }
}

答案 2 :(得分:1)

当他们触摸被视为同一触摸事件一部分的屏幕时,

touchesBegan:withEvent:始终会被一个或多个手指调用。当事件中的一个或多个手指移动时,touchesMoved:withEvent:会被触发。当触摸事件中的一个或多个手指从屏幕上移除时,touchesEnded:withEvent:被触发。最后,如果整个事件无效(即取消),则调用touchesCancelled:withEvent:

对于特定活动,您将始终收到一次或多次拨打touchesBegan:withEvent:,可能会拨打touchesMoved:withEvent的电话,然后拨打一次或多次touchesEnded:withEvent:或{{1} }

这里要考虑的一些事情:

  1. 你应该总是实现所有这四种方法,即使你什么也不做,以防止部分事件上升到响应者链(这是超级实现的作用)。
  2. 如果你正在处理这些事件,你不应该打电话给超级。
  3. 如果您因为想要在响应者链中调度事件而调用super,则必须调用正确的超级方法(在touchesCancelled:withEvent:实现
  4. 中调用超级touchesBegan:withEvent:

    要专门回答您的问题,请实施touchesMoved:withEvent以了解用户何时停止触摸屏幕,其中包含一个或多个触摸事件。