iOS - автоматическое скольжение UISlider к максимальному значению, когда пользователь достиг определенного значения - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу, чтобы ползунок автоматически сдвигался до максимального значения, если пользователь достигнет определенного значения.Анимация от текущего до максимального значения выполняется легко, но я застрял в проблеме, когда большой палец ползунка дергается вокруг, потому что он каким-то образом перетаскивается пользователем, но также анимируется набором значений ползунка.Это мой код:

@IBAction func sliderChange(_ sender: UISlider) {

    if sender.value >= sender.maximumValue / 2{
        sender.isUserInteractionEnabled = false
        Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: { timer in
            sender.setValue(sender.value + 0.01, animated: true)
            if sender.value >= sender.maximumValue{
                timer.invalidate()
                self.performSegue(withIdentifier: "MySegue", sender: nil)
            }
        })
    }

}

Так что, к сожалению, isUserInteractionEnabled не работает, когда мне это нужно.Я также безуспешно пытался:

sender.cancelTracking(with: nil)

и

for subview in sender.subviews{
    subview.isUserInteractionEnabled = false
}

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

Обновление:

Вот краткая демонстрация, чтобы убедиться, в чем заключается моя проблема.

illustration

1 Ответ

0 голосов
/ 01 февраля 2019

@ Стефан замените свой код следующим кодом и проверьте, как он работает для меня.

@IBAction func sliderChange(_ sender: UISlider) {

        if sender.value >= sender.maximumValue / 2{
            sender.isUserInteractionEnabled = false
            Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: { timer in
                sender.setValue(sender.value + 0.01, animated: true)
                if sender.value >= sender.maximumValue{
                    timer.invalidate()
                    sender.isUserInteractionEnabled = true
                } else if sender.value < 5{
                    timer.invalidate()
                    sender.isUserInteractionEnabled = true
                }
            })
        }

    }

Проверьте этот gif GIF

...