Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if user finished sliding on a continuous UISlider?

In my app, I have a couple of UISlider instances to change various values. The values are displayed right next to the slider, as well as rendered in a 3d space in another visible part of the app.

The 3d part includes some rather heavy calculations, and right now it doesn't seem possible to update it live as the slider changes. That would imply that I'd have to set the slider's continuous property to NO, therefore only getting updates when the slider has finished changing.

I'd prefer to have the displayed value update live, however. Is there a way to have a slider that is continuous (so I can update my value-label in real time) and still sends some kind of message once the user has finished interacting with it? My gut feeling right now is to subclass UISlider and override the touchesEnded: method. Is that feasible?

like image 609
winsmith Avatar asked Jan 09 '12 17:01

winsmith


2 Answers

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.

like image 131
Jasarien Avatar answered Oct 20 '22 19:10

Jasarien


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

like image 37
Stephen J Avatar answered Oct 20 '22 17:10

Stephen J