Check if user finished sliding on a continuous UISlider?

You can do this with simple target/actions.

Set a target and action for the UIControlEventValueChanged event, and then another target and action for the UIControlEventTouchUpInside event. With the continuous property set to YES, the value changed event will fire as the slider changes value, while the touch up inside event will only fire when the user releases the control.


I just had to do this, so I looked up touch properties, and used the full IBAction header.

This should be a viable alternative for people who want some extra control, though Jas's is definitely easier on the code side.

- (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


Also note you should connect the UIControlEventTouchUpOutside event as well in case the user drags his finger out of the control before lifting it.


In Swift 3:

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