以最佳方式处理 UISlider 值

Posted

技术标签:

【中文标题】以最佳方式处理 UISlider 值【英文标题】:Handle UISlider value in the best way 【发布时间】:2021-06-28 14:39:50 【问题描述】:

很抱歉这个问题,我在这里需要一个建议。 我有一个滑块来更改图表中的值(两点之间的距离),我是这样做的,我认为这是最糟糕的方法,但我可以找到更好的方法,谁能帮我让它变得更好,更先进!

您的帮助将不胜感激

@objc func stockSliderValueChanged(sender: UISlider) 
    let value = sender.value

    stockChart.lineGap = 0.7

    if value == 0 
        stockChart.lineGap = stockChart.lineGap - 0.5
     else if value > 0.0, value <= 0.1 
        stockChart.lineGap = stockChart.lineGap - 0.45
     else if value > 0.1, value <= 0.15 
        stockChart.lineGap = stockChart.lineGap - 0.4
     else if value > 0.15, value <= 0.2 
        stockChart.lineGap = stockChart.lineGap - 0.35
     else if value > 0.2, value <= 0.25 
        stockChart.lineGap = stockChart.lineGap - 0.3
     else if value > 0.25, value <= 0.3 
        stockChart.lineGap = stockChart.lineGap - 0.25
     else if value > 0.3, value <= 0.35 
        stockChart.lineGap = stockChart.lineGap - 0.2
     else if value > 0.35, value <= 0.4 
        stockChart.lineGap = stockChart.lineGap - 0.15
     else if value > 0.4, value <= 0.45 
        stockChart.lineGap = stockChart.lineGap - 0.1
     else if value > 0.45, value <= 5 
        stockChart.lineGap = stockChart.lineGap - 0.05
    

    if value > 0.5, value <= 0.55 
        stockChart.lineGap = stockChart.lineGap + 0.05
     else if value > 0.55, value <= 0.6 
        stockChart.lineGap = stockChart.lineGap + 0.1
     else if value > 0.6, value <= 0.65 
        stockChart.lineGap = stockChart.lineGap + 0.15
     else if value > 0.65, value <= 0.7 
        stockChart.lineGap = stockChart.lineGap + 0.2
     else if value > 0.7, value <= 0.75 
        stockChart.lineGap = stockChart.lineGap + 0.25
     else if value > 0.75, value <= 0.8 
        stockChart.lineGap = stockChart.lineGap + 0.3
     else if value > 0.8, value <= 0.85 
        stockChart.lineGap = stockChart.lineGap + 0.35
     else if value > 0.85, value <= 0.9 
        stockChart.lineGap = stockChart.lineGap + 0.4
     else if value > 0.9, value <= 0.95 
        stockChart.lineGap = stockChart.lineGap + 0.45
     else if value > 0.95, value <= 1 
        stockChart.lineGap = stockChart.lineGap + 0.5
    
    stockChart.reDraw()

【问题讨论】:

你检查slider.value,然后从中获取一个值,从(越接近0的值)-0.5到0.5(越接近1的值)。然后,将该值添加到lineCap。你看到“比率”/“百分比”的计算了吗?你有一个偏移量,但我会告诉你 lineCap 的附加值是从 0 到 100,然后转换为 -50 到 50(只需将其删除 50),然后将其除以 100,你得到 -0.5 到0.5。您看到或感觉到您可以尝试的逻辑吗? 这似乎不是UISlider 的问题,而是计算问题 【参考方案1】:

您需要找到描述您的变换的数学函数。 假设你真的不想要离散步骤,下面的函数应该可以解决问题(这是未经测试的):

@objc func stockSliderValueChanged(sender: UISlider) 
    let x = sender.value

    let offset = 0.7
    let computedSliderValue = abs(x - 0.5)

    stockChart.lineGap = offset - computedSliderValue
    stockChart.reDraw()

如果您确实需要这些步骤,请对computedSliderValue 进行一些舍入。

【讨论】:

以上是关于以最佳方式处理 UISlider 值的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式滑动 UISlider

如何以编程方式更改 UISlider 拇指图像的大小

UISLider 以正确的方式改变 UILabel 的值

如何以编程方式设置 UISlider 初始值,或者,iOS 程序如何启动?

在 Swift 中使用 UISlider 以编程方式更改 UILabel

如何在 Swift 中自定义 UISlider 值