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