UISlider 控制和反向的指数算法

问题描述

我需要一个以指数方式增长的 UiSlider,我找到了这段代码,它运行良好:

let steps = 10
let min: Double = 25
let max: Double = 1000

for i in 0...steps-1 {
  let value = exp(log(min) + (Double(i) / Double(steps-1)) * (log(max) - log(min)))
  print("step: \(i + 1),value: \(round(value))")
}

这是输出

step: 1,value: 25.0
step: 2,value: 38.0
step: 3,value: 57.0
step: 4,value: 85.0
step: 5,value: 129.0
step: 6,value: 194.0
step: 7,value: 292.0
step: 8,value: 441.0
step: 9,value: 664.0
step: 10,value: 1000.0

它工作正常,但我需要相反的公式,为了得到“步骤”,假设我得到 1000 的值,我需要得到 10,如果 664 得到 9,依此类推..

所以我需要与此相反的公式才能获得 STEP:

let value = exp(log(min) + (Double(i) / Double(steps-1)) * (log(max) - log(min)))

解决方法

for i in 0...steps-1 {
    let val = steps - i - 1
    let value = exp(log(min) + (Double(val) / Double(steps-1)) * (log(max) - log(min)))
    print("step: \(i + 1),value: \(round(value))")
}