Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UISlider events

I'm using an UISlider, its updated automatically except the user is touching the sliderbutton. therefore i did this in the function which updates automatically by an NSTimer:

if (!isSliderTouched) {
    [progressSlider setValue: progressValue];
}

How do I track the ending of this event, when the user releases his finger. I want to set isSliderTouched as long as the user interacts with this control.

EDIT: this should be the plot:

  1. user beginns draging/touching UISlider => isSliderTouched = YES
  2. user releases/untouch the UISlider => isSliderTouched = NO

Solution:

UIControlEventTouchDown
UIControlEventTouchUpInside
[progressSlider addTarget:self action:@selector(sliderMoveStart) forControlEvents:UIControlEventTouchDown];

cheers endo

like image 999
endo.anaconda Avatar asked Jan 12 '11 01:01

endo.anaconda


3 Answers

You can use:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents

to detect when the touchDown and touchUp events occur. You can set your flag accordingly.

I'm guessing from your code snippet that you are using a UISlider as a progress meter. Have you considered using a UIProgressView instead?

like image 145
pwc Avatar answered Oct 04 '22 17:10

pwc


This is marked solved, and yet I'd like to add another solution to this that I feel is cleaner.

if (!progressSlider.highlighted) {
    [progressSlider setValue: progressValue];
}
like image 33
Geebs Avatar answered Oct 04 '22 16:10

Geebs


Better way to track if the user is done interacting with UISlider is to use continuous flag.

If you want to trigger slider action only after the action is complete and user has moved his finger off it then use

[blurSlider  addTarget:self action:@selector(blurSliderChanged) forControlEvents:UIControlEventValueChanged];
    blurSlider.continuous = NO;

Otherwise by default its set to YES.

[blurSlider  addTarget:self action:@selector(blurSliderChanged) forControlEvents:UIControlEventValueChanged];
    blurSlider.continuous = YES;
like image 31
Sam B Avatar answered Oct 04 '22 16:10

Sam B