如何在 iOS 中延迟 UISlider 的开始触摸事件?
Posted
技术标签:
【中文标题】如何在 iOS 中延迟 UISlider 的开始触摸事件?【英文标题】:How to delay start touch event of a UISlider in iOS? 【发布时间】:2017-10-06 04:39:40 【问题描述】:在我的应用程序中,有一个 UISlider 只能在长按后滑动(比如说,在按下 0.1 秒后)。为了防止滑块立即交互,我将mySlider.isUserInteractionEnabled = false
设置为默认值。但是,由于.isUserInteractionEnabled
将禁用所有功能,包括长按手势,我使用另一个与顶部滑块大小相同的透明UIButton
来检测长按,并将mySlider.isUserInteractionEnabled = true
设置为回调动作。这很好用,只是必须先释放UIButton
,然后用户再次点击滑块以滑动它,而不是在同一触摸内直接拖动滑块。这使得滑块使用起来非常不方便。因此,我想知道是否:
-
除了我的方法之外,还有更好的方法让 UISlider 仅在一定延迟后才开始滑动?我很惊讶我找不到任何解决方案。我认为这是将滑块锁定在某个点的常见需求。
或
-
按照我的解决方案,有什么方法可以让我在同一次触摸中开始拖动滑块?
非常感谢您的任何回答。
补充:我的解决方案如下:在TableViewCell
中,有一个标签,一个滑块,和一个与滑块大小相同的不可见按钮(灰色背景区域) .我设置滑块属性isUserInteractionEnabled == false
,然后添加手势识别器来操作滑块(例如单击、双击用于我的自定义功能,以及启用滑块的长按手势)。长按按钮后,滑块的isUserInteractionEnabled
将设置为true,直到拇指变为新值。
基本上我只想禁用滑块对短按响应太快,滑块的其他功能将保持不变。我想可能有更好的方法来实现这一点,到目前为止,使用透明按钮是我能想到的唯一方法。
【问题讨论】:
如果你能提供一个演示来测试,那么它会有助于解决你的问题 @VarunNaharia 我已经添加了一些关于到目前为止我如何满足我的需求的信息。这可行,但是由于前面有一个按钮,所以在设置为启用滑块用户交互后,我必须释放按钮然后再次按下才能拖动,这完全不直观。我想要的是一个普通的滑块,只是它只在一定延迟后才开始拖动。 【参考方案1】:您可以禁用滑块上的用户交互,然后在其上添加手势识别器(虽然不太确定用户交互)。也许做这样的事情
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?
最新更新 正如 cmets 建议的那样,我们可以在滑块顶部添加一个按钮,并在其上添加 longPress 手势。处理可以在手势的处理程序 Action 中完成。
【讨论】:
您好,感谢您的精彩回答。最后,我仍然将longPress
放在我的隐形按钮中并一直禁用滑块,因为一旦禁用了用户交互,就不会检测到滑块 longPress。以上是关于如何在 iOS 中延迟 UISlider 的开始触摸事件?的主要内容,如果未能解决你的问题,请参考以下文章
UISlider 延迟调用touchesBegan,延迟调用valueChangeHandle。delay?
如何在 iOS 中使用 MpMoviePlayerController 在 UISlider 上显示缓冲数据?