Убедитесь, что пользователь закончил скольжение по непрерывному UISlider?
В моем приложении у меня есть несколько экземпляров UISlider для изменения различных значений. Значения отображаются рядом с ползунком, а также отображаются в трехмерном пространстве в другой видимой части приложения.
В трехмерную часть включены некоторые довольно тяжелые вычисления, и сейчас нет возможности обновлять ее в реальном времени с изменением ползунка. Это означало бы, что мне нужно установить свойство slider continuous
в NO
, поэтому получать обновления только после завершения изменения ползунка.
Я предпочел бы, чтобы отображаемое значение обновлялось в реальном времени. Есть ли способ иметь непрерывный слайдер (чтобы я мог обновить свой знак ценности в реальном времени) и все еще отправляет какое-то сообщение после того, как пользователь завершил взаимодействие с ним? Чувство кишки прямо сейчас заключается в подклассе UISlider и переопределении метода touchesEnded:
. Это возможно?
Ответы
Ответ 1
Вы можете сделать это с помощью простой цели/действий.
Задайте цель и действие для события UIControlEventValueChanged
, а затем еще одну цель и действие для события UIControlEventTouchUpInside
. Если свойство continuous
установлено на YES
, событие с измененным значением будет срабатывать, когда ползунок изменяет значение, в то время как прикосновение к внутреннему событию будет срабатывать только тогда, когда пользователь освободит элемент управления.
Ответ 2
Мне просто нужно было это сделать, поэтому я искал свойства касания и использовал полный заголовок IBAction.
Это должно быть жизнеспособной альтернативой для людей, которым нужен дополнительный контроль, хотя Jas определенно проще на стороне кода.
- (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
Ответ 3
Также обратите внимание, что вы должны подключить событие UIControlEventTouchUpOutside
, а также, если пользователь вытащит свой палец из-под контроля, прежде чем поднимать его.
Ответ 4
В Swift 3:
@IBAction func sliderValueChanged(_ slider: UISlider, _ event: UIEvent) {
guard let touch = event.allTouches?.first, touch.phase != .ended else {
// ended
return
}
// not ended yet
}