如何在iOS中延迟启动UISlider的触摸事件?

时间:2017-10-06 04:39:40

标签: ios swift uislider

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

  1. 除了我之外还有一种更好的办法让 UISlider 在一定延迟后才开始滑动?我很惊讶我找不到任何解决方案。我认为这是滑块被锁定在某一点的常见需求。
    1. 根据我的解决方案,有什么方法可以开始在同一触摸中拖动滑块吗?
    2. 非常感谢任何答案。

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

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

      enter image description here

1 个答案:

答案 0 :(得分:2)

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

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?

下的答案

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