События 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.