在某些情况下不调用 UIGestureRecognizerState.Ended
Posted
技术标签:
【中文标题】在某些情况下不调用 UIGestureRecognizerState.Ended【英文标题】:UIGestureRecognizerState.Ended is not called in some cases 【发布时间】: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")
【问题讨论】:
【参考方案1】:你应该几乎总是使用 UIGestureRecognizerState.Ended || UIGestureRecognizerState.Cancelled 作为两者之一肯定会在手势结束时调用。这样您还可以处理用户拖过屏幕的情况。
【讨论】:
我遇到了类似的问题,调用 Changed,但未调用 Canceled 或 Ended 这里也一样。你找到解决办法了吗?\ 这里也一样,有人找到解决方案了吗? 同时使用平移手势和点击手势可能会导致问题。平移时,有时会在平移手势结束之前调用点击手势。根据您的代码,这可能会导致问题。为了防止在平移过程中调用点击手势,请使用tap.require(toFail: pan)
(使用您的识别器名称)。【参考方案2】:
在我的情况下,这仅在我使用键盘上的 option 键在模拟器中使用两指捏合或旋转手势时发生。
通常在手势结束后再次按下 option 键(不移动鼠标)似乎可以解决问题并达到.ended
状态。
我在实际设备上没有遇到这个问题。
【讨论】:
【参考方案3】:当我在 switch 语句中有 .recognized
的情况时发生这种情况(不要这样做)。
【讨论】:
以上是关于在某些情况下不调用 UIGestureRecognizerState.Ended的主要内容,如果未能解决你的问题,请参考以下文章
为啥 AppDomain.CurrentDomain.GetAssemblies() 在某些情况下不返回 Global.asax 中的依赖程序集?