暂时禁用手势识别器滑动功能

Posted

技术标签:

【中文标题】暂时禁用手势识别器滑动功能【英文标题】:Temporarily disable gesture recognizer swiping functionality 【发布时间】:2016-08-29 13:42:12 【问题描述】:

我有一个带有多个按钮和图像的 uiview。我拖动那张卡片有点像火种界面。

我希望能够在某些点阻止用户拖动卡片并在其他点允许他们。

我尝试禁用它,但我这样做的方式禁用了与整个视图的所有用户交互,停止滑动,但也阻止用户点击我不想做的按钮(我只想阻止他们滑动)。

这就是我启动滑动的方式:

let gestureBack = UIPanGestureRecognizer(target: self, action: Selector("wasDraggedBack:"))
backview.addGestureRecognizer(gestureBack)

这就是我错误地尝试停止滑动的方式:

  self.backview.userInteractionEnabled = true

我怎样才能阻止视图滑动而不影响视图内的所有其他按钮等。

谢谢

【问题讨论】:

首先尝试gestureBAck.enabled = NO,如果它不起作用,那么您需要在您的wasDraggedBAck方法中设置一个标志,并且只有在该标志设置为YES时才能继续。 请参考***.com/questions/5991250/disable-gesture-recognizer 【参考方案1】:

是的,UIGestureRecognizer 有一个委托方法,你可以像下面这样设置委托方法

let gestureBack = UIPanGestureRecognizer(target: self, action: Selector("wasDraggedBack:"))
backview.addGestureRecognizer(gestureBack)
//set the delegate
 gestureBack.delegate? = self

并确认委托,

class ViewController: UIViewController,UIGestureRecognizerDelegate 


最后使用这个委托方法来触发动作,

func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool 
    //condition to recognise the gesture 
    return true; //or false

【讨论】:

【参考方案2】:

根据文档,所有UIGestureRecognizer 类对象都有一个enabled 属性。

它的作用是:

禁用手势识别器,使其不接收触摸。默认值是true。如果在手势识别器当前正在识别手势时将此属性更改为 false,则手势识别器将转换为取消状态。

【讨论】:

【参考方案3】:

你可以这样做,

 gestureBack.enabled = false

【讨论】:

以上是关于暂时禁用手势识别器滑动功能的主要内容,如果未能解决你的问题,请参考以下文章

在 AVPlayerViewController 中禁用手势识别器

在滑动手势识别器上禁用“在突出显示时显示触摸”

禁用手势识别器

如何禁用“手势识别器”(XMCircleGestureRecognizer)?

手势识别器 - 新区域

我可以禁用UIPageViewController的页面边框手势识别器吗?刷卡一个?