检查用户是否完成滑动连续的UISlider?

在我的应用程序中,我有几个UISlider实例来更改各种值。 这些值显示在滑块旁边,并在应用程序的另一个可见部分中显示在三维空间中。

3d部分包含了一些相当繁重的计算,现在似乎不可能在滑块更改时更新它。 这意味着我必须将滑块的continuous属性设置为NO ,因此只有在滑块完成更改后才能更新。

但是,我希望显示的值更新。 有没有办法让滑块连续(所以我可以实时更新我的​​价值标签),并仍然发送一些消息,一旦用户完成与它的交互? 我现在的直觉是UISlider的子类,并覆盖touchesEnded:方法。 这可行吗?

你可以用简单的目标/行动来做到这一点。

UIControlEventValueChanged事件设置目标和操作,然后为UIControlEventValueChanged事件设置另一个目标和操作。 在continuous属性设置为YES ,值更改事件将在滑块更改值时触发,而触发内部事件只会在用户释放控件时触发。

我只需要这样做,所以我查了一下touch属性,并使用了完整的IBAction头。

对于想要额外控制的人来说,这应该是一个可行的select,尽pipeJas在代码方面肯定更容易。

 - (IBAction)itemSlider:(UISlider *)itemSlider withEvent:(UIEvent*)e; { UITouch * touch = [e.allTouches anyObject]; if( touch.phase != UITouchPhaseMoved && touch.phase != UITouchPhaseBegan) { //The user hasn't ended using the slider yet. } } 

:d

另外请注意,您应该连接UIControlEventTouchUpOutside事件,以防用户在提起之前将其手指拖出控件。

在Swift 3:

 @IBAction func sliderValueChanged(_ slider: UISlider, _ event: UIEvent) { guard let touch = event.allTouches?.first, touch.phase != .ended else { // ended return } // not ended yet }