如何以编程方式调用 UISlider 的 .valueChanged 事件

How to programmatically call UISlider's .valueChanged event

当我触摸并拖动滑块时,它的 .valueChanged 事件正常工作:

slider.addTarget(self, action: #selector(sliderValueChanged(sender:)), for: .valueChanged

@objc func sliderValueChanged(sender: UISlider) {
    print(sender.value)
}

我有另一个移动的视图,就像地图上的汽车。当汽车水平移动时,返回一个值,该值使滑块物理移动,这也能正常工作。但是因为我没有实际拖动滑块,所以它的 .valueChanged 不会被调用。

如何在不触摸滑块时以编程方式调用事件?

func carTraveled(distance: Double) {

    slider.value = Float(distance) // slider does move but event is never called
}

只需调用您的 action 选择器:

func carTraveled(distance: Double) {

    slider.value = Float(distance)
    sliderValueChanged(sender: slider)
}

或者,如果滑块有很多目标动作对,或者您当时不知道 action 选择器方法,您可以 sendActions(for:):

func carTraveled(distance: Double) {

    slider.value = Float(distance)
    slider.sendActions(for: .valueChanged)
}