iOS, как сделать так, чтобы ползунок останавливался в дискретных точках

Я хотел бы, чтобы ползунок останавливался в дискретных точках, которые представляют целые числа на временной шкале. Как лучше всего это сделать? Мне не нужны промежуточные ценности. Было бы замечательно, если бы ползунок мог также «фиксироваться» в каждой отдельной точке.

42
задан meagar 12 July 2012 в 15:01
поделиться

1 ответ

Быстрая версия с ValueChanged и TouchUpInside.

РЕДАКТИРОВАНИЕ: На самом деле необходимо поднять трубку 3 события в этом случае:

yourSlider.addTarget(self, action: #selector(presetNumberSliderTouchUp), for: [.touchUpInside, .touchUpOutside, .touchCancel])

я только что вставил свой код, но можно легко видеть, как он сделан.

private func setSizesSliderValue(pn: Int, slider: UISlider, setSliderValue: Bool)
{
    if setSliderValue
    {
        slider.setValue(Float(pn), animated: true)
    }

    masterPresetInfoLabel.text = String(
        format: TexturingViewController.createAndSendPresetNumberNofiticationTemplate,
        self.currentPresetNumber.name.uppercased(),
        String(self.currentPresetNumber.currentUserIndexHumanFriendly)
    )
}

@objc func presetNumberSliderTouchUp(_ sender: Any)
{
    guard let slider = sender as? NormalSlider else{
        return
    }

    setupSliderChangedValuesGeneric(slider: slider, setSliderValue: true)
}

private func setupSliderChangedValuesGeneric(slider: NormalSlider, setSliderValue: Bool)
{
    let rounded = roundf((Float(slider.value) / Float(presetNumberStep))) * Float(presetNumberStep)

    // Set new preset number value
    self.currentPresetNumber.current = Int(rounded)
    setSizesSliderValue(pn: Int(rounded), slider: slider, setSliderValue: setSliderValue)
}

@IBAction func presetNumberChanged(_ sender: Any)
{
    guard let slider = sender as? NormalSlider else{
        return
    }

    setupSliderChangedValuesGeneric(slider: slider, setSliderValue: false)
}
0
ответ дан 26 November 2019 в 23:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: