【问题标题】:UIPanGestureRecognizer not working with UIControlEventsUIPanGestureRecognizer 不适用于 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 时将被识别。如果我不开始平移,touchUpInsidetouchUpOutside 也会被识别。但如果我平移,例如放开我的 fieldViewtouchUpOutside 将不会被触发。


注意:touchDragInside 不是替代品,因为它只能识别大约 100 像素范围内的拖动。

【问题讨论】:

    标签: ios uigesturerecognizer draggable target uipangesturerecognizer


    【解决方案1】:

    reference

    如果手势识别器识别出它的手势,则视图的剩余触摸将被取消。

    您可以尝试将cancelsTouchesInView 设置为false,或在您的视图中覆盖touchesCancelled(_:with:)

    【讨论】:

    • 我试过了,但 touchesCancelled 方法不会被调用,我也找不到区分 touchUpInsidetouchUpOutside 的方法
    • 添加 cancelsTouchesInView 对我有用。我有一个 UIControl 子类,并且正在使用 UIPanGesture/UILongPressGesture 组合来驱动 sendAction(...)。我在两个 GR 上都设置了该属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    相关资源
    最近更新 更多