首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在UISlider中启用“点击和滑动”?

如何在UISlider中启用“点击和滑动”?
EN

Stack Overflow用户
提问于 2014-03-28 15:36:08
回答 13查看 15K关注 0票数 19

我想要的是一个UISlider,它不仅允许用户在启动thumbRect时滑动,而且还允许用户在其他地方点击时滑动。当用户点击滑块但在thumbRect之外时,滑块应该跳到这个值,然后仍然保持用户的滑动姿态

到目前为止,我尝试的是实现UIGestureRecognizer的一个子类,比如in this suggestion。当thumbRect之外的某个地方发生触摸时,它就开始了。问题是滑块设置了它的值,但是由于触下识别器窃取了触摸,所以忽略了进一步的滑动手势。

我如何实现一个滑块,你可以点击任何地方,但仍然是立即滑行?

编辑: ali59a很好地添加了我现在所做的事情的an example。这需要再次举起手指,之后我可以触摸和拖动滑梯(我不想要点击,我需要一个“触摸和滑动”马上)。

EN

Stack Overflow用户

发布于 2017-11-16 02:29:29

我没有检查David answer,但我会发布我的解决方案,以防有人在寻找其他方法。

Swift 4

首先,创建一个自定义UISlider,以便它还可以检测到条形图上的触摸:

代码语言:javascript
复制
class CustomSlider: UISlider {
    override func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
        return true
    }
}

(别忘了将滑块设置为CustomSlider,在故事板上)

显示滑块的视图控制器的on viewDidLoad:

代码语言:javascript
复制
self.slider.addTarget(self, action: #selector(sliderTap), for: .touchDown)

(这只用于在移动滑块时暂停播放机)

然后,在UISlider操作中:

代码语言:javascript
复制
@IBAction func moveSlider(_ sender: CustomSlider, forEvent event: UIEvent) {
    if let touchEvent = event.allTouches?.first {
        switch touchEvent.phase {
            case .ended, .cancelled, .stationary:
                //here, start playing if needed
                startPlaying()                    
            default:
                break
        }
    }
}

在您的"sliderTap“选择器方法上:

代码语言:javascript
复制
@objc func sliderTap() {
    //pause the player, if you want
    audioPlayer?.pause()
}

建议:在开始播放前设置播放器"currentTime“:

代码语言:javascript
复制
private func startPlaying() {
    audioPlayer?.currentTime = Double(slider.value)
    audioPlayer?.play()
}
票数 2
EN
查看全部 13 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22717167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档