Подтвердить что ты не робот

Убедитесь, что пользователь закончил скольжение по непрерывному UISlider?

В моем приложении у меня есть несколько экземпляров UISlider для изменения различных значений. Значения отображаются рядом с ползунком, а также отображаются в трехмерном пространстве в другой видимой части приложения.

В трехмерную часть включены некоторые довольно тяжелые вычисления, и сейчас нет возможности обновлять ее в реальном времени с изменением ползунка. Это означало бы, что мне нужно установить свойство slider continuous в NO, поэтому получать обновления только после завершения изменения ползунка.

Я предпочел бы, чтобы отображаемое значение обновлялось в реальном времени. Есть ли способ иметь непрерывный слайдер (чтобы я мог обновить свой знак ценности в реальном времени) и все еще отправляет какое-то сообщение после того, как пользователь завершил взаимодействие с ним? Чувство кишки прямо сейчас заключается в подклассе UISlider и переопределении метода touchesEnded:. Это возможно?

4b9b3361

Ответ 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
}