Swift以编程方式启动UILongPressGesture

时间:2019-04-26 02:46:33

标签: ios swift uigesturerecognizer uilongpressgesturerecogni

我想以编程方式在用户触摸按钮时启动UILongPressGesture。这是几年前在How can I send a UILongPressGesture programmatically?上提出的,但我想知道是否有更清洁或更现代的解决方案。

我现有的UILongPressGestureRecognizer代码(将实际的用户交互映射到功能)如下:

view.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(longPress)))

其中longPress定义为:

@objc func longPress(sender: UILongPressGestureRecognizer) {
    switch sender.state {
    case .began:
        // Display a 'hover' animation for a specific UIView
        ....
    case .changed:
        // Move existing hover animation
        ...
    default:
        // Complete the hover animation
        ...
    }
}

所需功能

我正在使用此长按来显示用户选择的UIView的“悬停”效果。我还想提供一个按钮来自动开始长按(绕过longPress sender.state == .began)。我计划的解决方案是以编程方式创建.began长按,创建一个手势对象,用户可以在屏幕上拖动该对象(可能的话甚至将UILongPressGestureRecognizer转换为UIPanGestureRecognizer),然后继续具有新手势的悬停动画逻辑。

1 个答案:

答案 0 :(得分:0)

我找到了一个更清洁的解决方案,即将要解决的问题-用包含自己的UIView的{​​{1}}替换所需的按钮。我将此手势的UILongPressGestureRecognizer设置为0,因此其行为等效于按钮的minimumPressDuration事件。此新手势使用与原始问题相同的touchDown函数,而无需触发任何其他代码。