Log scale
private func wpmForSliderValue(_ sliderValue: RangeValue) -> RangeValue {
// Input will be between min and max
let minX = Float(priceSlider.frame.minX)
let maxX = Float(priceSlider.frame.maxX)
// Output will be between minv and maxv
let minV = log(defaultPriceRange.lower)
let maxV = log(defaultPriceRange.upper)
// Adjustment factor
let scale = (maxV - minV) / (maxX - minX)
let lower = exp(minV + (scale * (sliderValue.lower - minX)))
let upper = exp(minV + (scale * (sliderValue.upper - minX)))
return RangeValue.init(lower: lower, upper: upper)
}
private func sliderValueForWpm(_ wpm: RangeValue) -> RangeValue {
// Output will be between minv and maxv
let min = Float(priceSlider.frame.minX)
let max = Float(priceSlider.frame.maxX)
// Input will be between min and max
let minv = log(defaultPriceRange.lower)
let maxv = log(defaultPriceRange.upper)
// Adjustment factor
let scale = (maxv - minv) / (max - min)
let lower = (((log(wpm.lower) - minv) / scale) + min)
let upper = (((log(wpm.upper) - minv) / scale) + min)
return RangeValue.init(lower: lower, upper: upper)
}