Используйте UISider для создания логарифмической шкалы значений

Есть ли способ добиться экспоненциального увеличения значений, выводимых UISlider в приложении для iPhone? Например, первая треть генерирует 1-10, вторая треть генерирует от 11 до 100, а последняя треть генерирует от 101 до 1000?


person lavelle    schedule 05.11.2010    source источник
comment
Это больше похоже на экспоненциальное, чем на логарифмическое ...   -  person Vladimir    schedule 05.11.2010
comment
Я не был уверен, что это правильное слово, но в Википедии говорится, что простой пример - это когда приращения на вертикальной оси диаграммы обозначены 1, 10, 100, 1000 вместо 1, 2, 3, 4.   -  person lavelle    schedule 05.11.2010


Ответы (2)


Вы можете самостоятельно вычислить значение журнала / опыта с помощью ползунка и отобразить это значение!

Но если вам нужно значение от 1 до 1000, вы можете установить min ползунка на 0, max на 3 и сделать степень 10:

powf(10.0,mySlider.value)
person Benoît    schedule 05.11.2010
comment
ха-ха вроде гений, не подумал об этом: P какой код obj-c для этого? есть ли функция или я сам напишу математику? используйте операторы if, чтобы определить, на сколько умножить каждое значение, или есть более чистый способ? - person lavelle; 05.11.2010
comment
Это функция в C. Везде, где вы хотите получить значение ползунка как экспоненциальное, используйте этот фрагмент. Не забудьте отметить ответ Беноа как принятый. - person JoePasq; 05.11.2010
comment
Примечание. Для 0– ›1 log10 вы должны сделать что-то вроде ((10^x)-1)/9. Я обнаружил, что с объемом, например, sliderValue от 0,0 до 1,0 лучше всего коррелирует с базой журнала 100: float volumeLevel = (powf(100.0f, sliderValue)-1.0f)/99.0f; - person Albert Renshaw; 26.12.2018

Я получил эти методы 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);
}
person Adam Talaat    schedule 12.03.2011
comment
Мне нужно было разобраться, как настроить соотношение сторон от произвольного до 1: 1 на основе значения 1.0-0.5, этот код стал основой для моего решения. Спасибо! - person Will Jones; 06.03.2019
comment
Именно то, что мне нужно! - person Grambo; 29.12.2020