【问题标题】:UIGestureRecognizerState.Ended is not called in some cases在某些情况下不调用 UIGestureRecognizerState.Ended
【发布时间】:2015-10-10 16:36:06
【问题描述】:

当我拖动视图并将其放到新位置时,每次都会调用 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")
    }
}

【问题讨论】:

    标签: ios swift uigesturerecognizer uipangesturerecognizer


    【解决方案1】:

    你应该几乎总是使用 UIGestureRecognizerState.Ended || UIGestureRecognizerState.Cancelled 作为两者之一肯定会在手势结束时调用。这样您还可以处理用户拖过屏幕的情况。

    【讨论】:

    • 我遇到了类似的问题,调用 Changed,但未调用 Canceled 或 Ended
    • 这里也一样。你找到解决办法了吗?\
    • 这里也一样,有人找到解决方案了吗?
    • 同时使用平移手势和点击手势可能会导致问题。平移时,有时会在平移手势结束之前调用点击手势。根据您的代码,这可能会导致问题。为了防止在平移过程中调用点击手势,请使用tap.require(toFail: pan)使用您的识别器名称)。
    【解决方案2】:

    在我的情况下,这仅在我使用键盘上的 option 键在模拟器中使用两指捏合或旋转手势时发生。

    通常在手势结束后再次按下 option 键(不移动鼠标)似乎可以解决问题并达到.ended 状态。

    我在实际设备上没有遇到这个问题。

    【讨论】:

      【解决方案3】:

      当我在 switch 语句中有 .recognized 的情况时发生这种情况(不要这样做)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-28
        • 2011-09-04
        • 1970-01-01
        相关资源
        最近更新 更多