Swift 以编程方式启动 UILongPressGesture
Swift Programmatically Launch a UILongPressGesture
我想在用户触摸按钮时以编程方式启动 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
...
}
}
所需功能
我正在使用此长按来显示 'hovering' 用户选择的任何 UIView
效果。我还想提供一个按钮来自动启动长按(绕过 longPress
,其中 sender.state == .began
)。我预计的解决方案是以编程方式创建 .began
长按,创建一个用户可以在屏幕上拖动的手势对象(如果可能,甚至可能将 UILongPressGestureRecognizer
转换为 UIPanGestureRecognizer
),然后继续新手势的悬停动画逻辑。
我找到了一个更简洁的解决手头问题的方法 - 用包含自己的 UILongPressGestureRecognizer
的 UIView
替换所需的按钮。我将此手势的 minimumPressDuration
设置为 0,因此它的行为等同于按钮的 touchDown
事件。这个新手势使用与原始问题相同的 longPress
函数,不需要任何额外的代码来触发。
我想在用户触摸按钮时以编程方式启动 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
...
}
}
所需功能
我正在使用此长按来显示 'hovering' 用户选择的任何 UIView
效果。我还想提供一个按钮来自动启动长按(绕过 longPress
,其中 sender.state == .began
)。我预计的解决方案是以编程方式创建 .began
长按,创建一个用户可以在屏幕上拖动的手势对象(如果可能,甚至可能将 UILongPressGestureRecognizer
转换为 UIPanGestureRecognizer
),然后继续新手势的悬停动画逻辑。
我找到了一个更简洁的解决手头问题的方法 - 用包含自己的 UILongPressGestureRecognizer
的 UIView
替换所需的按钮。我将此手势的 minimumPressDuration
设置为 0,因此它的行为等同于按钮的 touchDown
事件。这个新手势使用与原始问题相同的 longPress
函数,不需要任何额外的代码来触发。