События UISlider

Я использую UISlider, его обновление автоматически, за исключением того, что пользователь прикасается к слайдер-кнопке. поэтому я сделал это в функции, которая автоматически обновляется с помощью NSTimer:

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

Как отслеживать окончание этого события, когда пользователь отпускает палец. Я хочу установить isSliderTouched, пока пользователь взаимодействует с этим элементом управления.

EDIT: это должен быть график:

  • пользователь начинает использовать/трогать UISlider = > isSliderTouched = YES
  • пользователь выпускает/отключает UISlider = > isSliderTouched = NO

Решение

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

cheers endo

Ответы

Ответ 1

Вы можете использовать:

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

для обнаружения событий touchDown и touchUp. Вы можете установить свой флаг соответственно.

Я угадываю из вашего фрагмента кода, что вы используете UISlider в качестве индикатора прогресса. Вы считали, что вместо этого используете UIProgressView?

Ответ 2

Лучше всего отслеживать, будет ли пользователь взаимодействовать с UISlider, использовать непрерывный флаг.

Если вы хотите запустить действие ползунка только после завершения действия, и пользователь отпустил его палец, используйте

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

В противном случае по умолчанию установлено значение YES.

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

Ответ 3

Это отмечено, и я хочу добавить еще одно решение, которое я считаю более чистым.

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

Ответ 4

когда пользователь прикасается к ползунку, вы можете установить флаг булевой переменной и сделать его НЕТ. и в методе обновления проверьте, установлен ли флаг YES или NO.