UISlider с разными уровнями сегментации

Я хотел бы создать ползунок диапазона с разными уровнями чувствительности. Он должен действовать по-разному в зависимости от конкретной части диапазона, выбранного пользователем. то есть - если диапазон моего ползунка составляет 1-100 000, то установка диапазона на более низкие значения подскочит на 1, а установка диапазона на более высокие значения подскочит на 100.

eBay реализовал такой слайдер на своем веб-сайте (обратите внимание на слайдер диапазона цен слева): http://www.ebay.com/sch/i.html?LH_FS=0&_sacat=0&_from=R40&_nkw=car&_mPrRngCbx=1&_udlo=490&_udhi=21%2C000%2C000

Любая идея?


person Rizon    schedule 18.01.2013    source источник


Ответы (2)


Установите диапазон ползунка от 0 до 5. Затем рассчитайте желаемое значение как 10 ^ sliderValue. Это в основном дает вам логарифмическую шкалу.

Если вам нужны дискретные, но разные линейные диапазоны, то ответ от kabram, вероятно, больше, чем вы хотите.

Обновлять:

Установите диапазон ползунка от 0,0 до 5,0. По мере изменения значения ползунка расчетное значение становится следующим:

double newValue = pow(10, slider.value);

где slider это UISlider. pow — стандартная математическая функция C. Это дает вам следующее:

slider.value newValue
     0.0          1.0
     1.0         10.0
     2.0        100.0
     3.0       1000.0
     4.0      10000.0
     5.0     100000.0
person rmaddy    schedule 18.01.2013
comment
не могли бы вы уточнить это? Я не получил расчет, который вы предложили - person Rizon; 18.01.2013

Поскольку ползунок не показывает соответствующее значение, почему бы вам просто не добавить выход действия к событию изменения значения и не вычислить соответствующие переходы.

Так, например, установите диапазон ползунка от 1 до 100. Предположим, вы показываете вычисленный диапазон с помощью метки.

Тогда значение метки будет:

if slider.value < 10, then value = range
else if slider.value < 20 then value = 10 + (slider.value - 10) * 2 // increments of 2
else if slider.value < 50 then value = 10 + 10 * 2 + (slider.value - 20) * 5 // increments of 5

...

вы поняли идею?

person Καrτhικ    schedule 18.01.2013