如何延迟 iOS 中 UISlider 的开始触摸事件?

How to delay start touch event of a UISlider in iOS?

在我的应用程序中,有一个 UISlider 只能在长按后滑动(比方说,在按下 0.1 秒后)。为了防止滑块立即交互,我将 mySlider.isUserInteractionEnabled = false 设置为默认值。然而,由于 .isUserInteractionEnabled 将禁用所有功能,包括长按手势,我使用另一个透明的 UIButton 与它顶部的滑块大小相同来检测长按,并设置mySlider.isUserInteractionEnabled = true 在回调操作中。这工作正常,除了必须先释放 UIButton 然后用户再次点击滑块以滑动它而不是直接在同一触摸中拖动滑块。这使得滑块使用起来非常不方便。因此,我想知道是否:

  1. 有比我更好的方法让 UISlider 仅在一定延迟后才开始滑动吗?我很惊讶我找不到任何解决方案。我认为这是将滑块锁定在某个点的常见需求。

  1. 按照我的解决方案,有什么方法可以让我在同一触摸内开始拖动滑块拇指吗?

非常感谢您的回答。

添加:我的解决方案如下所示:在TableViewCell中,有一个标签、一个滑块和一个与滑块(灰色背景区域)。我设置了 slider 属性 isUserInteractionEnabled == false,然后添加手势识别器来操作滑块(例如单击、双击我的自定义功能,以及启用滑块的长按手势)。长按按钮后,滑块的 isUserInteractionEnabled 将设置为 true,直到拇指转到新值。

基本上我只想禁用滑块对短按的响应太快,滑块的其他功能将保持不变。我想可能有更好的方法来实现这一点,到目前为止,使用透明按钮是我能想到的唯一方法。

您可以禁用滑块上的用户交互,然后在其上添加一个手势识别器(虽然不确定用户交互)。也许做这样的事情

let longPress = UILongPressGestureRecognizer(target: self.slider, action: Selector("longPressAndSlide:"))
longPress.minimumPressDuration = 0
self.addGestureRecognizer(longPress)

longPressAndSlide中,您可以计算移动的方向和增量,并相应地设置滑块的值。

这实际上已经回答了多次。只有更好的搜索才能为您提供更多帮助。

更新 检查答案 - How to enable "tap and slide" in a UISlider?

最新更新 正如评论所建议的那样,我们可以在滑块顶部添加一个按钮并在其上添加长按手势。可以在手势的处理程序 Action 中完成处理。