首页 文章

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

提问于
浏览
1

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

  • 除了我以外还有一种更好的办法让 UISlider 在经过一定的延迟后才开始滑动吗?我找不到任何解决方案 . 我认为这是滑块被锁定在某一点的常见需求 .

要么

  • 根据我的解决方案,有什么方法可以开始在同一触摸中拖动滑块?

非常感谢任何答案 .

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

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

enter image description here

1 回答

  • 2

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

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

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

    这实际上已经多次回答了 . 只是一个更好的搜索会帮助你更多 .

    Update 检查下的答案 - How to enable "tap and slide" in a UISlider?

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

相关问题