UIPanGestureRecognizer 不适用于 UIControlEvents
Posted
技术标签:
【中文标题】UIPanGestureRecognizer 不适用于 UIControlEvents【英文标题】:UIPanGestureRecognizer not working with UIControlEvents 【发布时间】:2017-07-26 06:23:50 【问题描述】:我制作了一个自定义 UIControl,它使用 UIControlEvents
来识别某些交互。一切都很好。现在我还希望我的 UIControl 能够识别UIPanGestureRecognizer
,这是代码
fieldView.addTarget(self, action: #selector(willSelectField(sender:)), for: .touchDown)
fieldView.addTarget(self, action: #selector(didSelectField(sender:)), for: .touchUpInside)
fieldView.addTarget(self, action: #selector(canceledFieldSelection(sender:)), for: .touchUpOutside)
fieldView.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(draggingField(gesture:))))
所以当我点击我的 fieldView(自定义 UIControl)touchDown
时将被识别。如果我不开始平移,touchUpInside
和 touchUpOutside
也会被识别。但如果我平移,例如放开我的 fieldView,touchUpOutside
将不会被触发。
注意:touchDragInside
不是替代品,因为它只能识别大约 100 像素范围内的拖动。
【问题讨论】:
【参考方案1】:见reference:
如果手势识别器识别出它的手势,则视图的剩余触摸将被取消。
您可以尝试将cancelsTouchesInView
设置为false
,或在您的视图中覆盖touchesCancelled(_:with:)
。
【讨论】:
我试过了,但touchesCancelled
方法不会被调用,我也找不到区分 touchUpInside
或 touchUpOutside
的方法
添加 cancelsTouchesInView 对我有用。我有一个 UIControl 子类,并且正在使用 UIPanGesture/UILongPressGesture 组合来驱动 sendAction(...)。我在两个 GR 上都设置了该属性以上是关于UIPanGestureRecognizer 不适用于 UIControlEvents的主要内容,如果未能解决你的问题,请参考以下文章
在 UIButtons 上禁用 UIPanGestureRecognizer
如何在父视图中限制 UIPanGestureRecognizer