Есть ли способ добиться экспоненциального увеличения значений, выводимых UISlider в приложении для iPhone? Например, первая треть генерирует 1-10, вторая треть генерирует от 11 до 100, а последняя треть генерирует от 101 до 1000?
Используйте UISider для создания логарифмической шкалы значений
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
ха-ха вроде гений, не подумал об этом: P какой код obj-c для этого? есть ли функция или я сам напишу математику? используйте операторы if, чтобы определить, на сколько умножить каждое значение, или есть более чистый способ?
- person lavelle; 05.11.2010
Это функция в C. Везде, где вы хотите получить значение ползунка как экспоненциальное, используйте этот фрагмент. Не забудьте отметить ответ Беноа как принятый.
- person JoePasq; 05.11.2010
Примечание. Для 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
Мне нужно было разобраться, как настроить соотношение сторон от произвольного до 1: 1 на основе значения 1.0-0.5, этот код стал основой для моего решения. Спасибо!
- person Will Jones; 06.03.2019
Именно то, что мне нужно!
- person Grambo; 29.12.2020