使用UISider生成对数刻度值

lav*_*lle 4 iphone logarithm objective-c uislider

有没有办法让iPhone应用程序中的UISlider输出的值以指数方式增加?例如,第一个第三个产生1-10,第二个产生11到100,最后一个产生101到1000?

Ben*_*oît 12

您可以从滑块计算自己的log/exp值,并显示该值!

但是如果你想要一个1到1000之间的值,你可以将滑块的min设置为0,max设置为3并使10的幂:

powf(10.0,mySlider.value)
Run Code Online (Sandbox Code Playgroud)


小智 11

我从这篇文章中导出了这些Objective C方法:Logarithmic slider

-(double) wpmForSliderValue: (double) sliderValue {
    // Input will be between min and max
    static double min = WPM_SLIDER_MIN;
    static double max = WPM_SLIDER_MAX;

    // Output will be between minv and maxv
    double minv = log(WPM_SCALE_MIN);
    double maxv = log(WPM_SCALE_MAX);

    // Adjustment factor
    double scale = (maxv - minv) / (max - min);

    return exp(minv + (scale * (sliderValue - min)));
}

-(double) sliderValueForWpm: (double) wpm {
    // Output will be between min and max
    static double min = WPM_SLIDER_MIN;
    static double max = WPM_SLIDER_MAX;

    // Input will be between minv and maxv
    double minv = log(WPM_SCALE_MIN);
    double maxv = log(WPM_SCALE_MAX);

    // Adjustment factor
    double scale = (maxv - minv) / (max - min);

    return (((log(wpm) - minv) / scale) + min);
}
Run Code Online (Sandbox Code Playgroud)