在某些情况下不会调用 UIGestureRecognizerState.Ended

Esq*_*uth 5 uigesturerecognizer ios uipangesturerecognizer swift

当我拖动视图并将其放到新位置时,每次都会调用 .Ended 。

当我拖动视图一段时间并将其放在开始的同一位置时,没有任何内容被调用,我期望 .Ended 或 default 被调用,但没有发生。

为什么会出现这种情况?我如何了解用户何时持续释放视图?

var gestureRecognizer = UIPanGestureRecognizer(target: self, action: Selector("dragged:"))
gestureRecognizer.delegate = self
view.addGestureRecognizer(gestureRecognizer)

func dragged(gesture: UIPanGestureRecognizer) {
    switch gesture.state {
    case UIGestureRecognizerState.Began:
        print("calls this everytime touch began")
    case UIGestureRecognizerState.Ended:
        print("doesn't call this everytime")
    default: 
        print("never calls this")
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 2

您几乎应该始终使用 UIGestureRecognizerState.Ended || UIGestureRecognizerState.Cancelled 作为两者之一肯定会在手势结束时被调用。通过这种方式,您还可以处理用户拖过屏幕的情况。

  • 我遇到了类似的问题,其中调用了 Changed,但未调用 Canceled 或 Ended (6认同)
  • 同时使用平移手势和点击手势可能会导致问题。平移时,有时会在平移手势结束之前调用点击手势。根据您的代码,这可能会导致问题。要防止在平移过程中调用点击手势,请使用“tap.require(toFail: pan)”(**使用您的识别器名称**)。 (2认同)