检查用户是否完成滑动连续的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 }