使用UISlider生成对数刻度值

6

有没有一种方法可以使iPhone应用程序中的UISlider输出的值呈指数增长?例如,第一个三分之一生成1-10,第二个三分之一生成11到100,最后一个三分之一生成101到1000?


那听起来更像是指数而不是对数... - Vladimir
我不确定这是否是正确的说法,但维基百科解释说:“一个简单的例子是在图表的纵轴上标记为1、10、100、1000而不是1、2、3、4。” - lavelle
2个回答

14
你可以通过滑块计算log/exp的值,并显示该值!但是如果你想要一个值在1到1000之间,可以将滑块的最小值设置为0,最大值设置为3,并进行10的幂运算:

你可以通过滑块计算自己的log/exp值,并显示这个值!但是如果你想要一个在1到1000之间的值,你可以将滑块的最小值设为0,最大值设为3,然后进行10的幂运算:

powf(10.0,mySlider.value)

哈哈,有点天才,没想到那个 :P 这个的 obj-c 代码是什么?有函数还是我自己写数学公式? 使用 if 语句来确定每个值要乘以多少,或者有更简洁的方法吗? - lavelle
那是C语言中的函数。无论何时您想要检索滑块值作为指数,请在那里使用该片段。不要忘记将Benôit的答案标记为已接受。 - fearmint
注意:对于0到1的log10,您应该执行类似于((10^x)-1)/9的操作。例如,我发现在音量方面,从0.0到1.0的滑块值与以100为底数的对数最相关:float volumeLevel = (powf(100.0f, sliderValue)-1.0f)/99.0f; - Albert Renshaw

13

我从这篇帖子中提取了这些Objective C方法:对数滑块

-(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);
}

我需要解决如何根据1.0-0.5的值将任意宽高比调整为1:1,这段代码是我解决问题的基础。谢谢! - Will Jones
正是我所需要的! - Grambo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接