Как я могу использовать UIScrollView для изменения значений, как UISlider? - PullRequest
1 голос
/ 02 ноября 2010

Таким образом, UISlider отлично работает для изменения / выбора значений, но он не выглядит так здорово.То, что я хотел бы реализовать, больше похоже на горизонтально вращающийся циферблат.У меня уже есть вся необходимая графика, и я уже реализовал представление прокрутки для перемещения моего изображения влево и вправо.

Проблема на этом этапе заключается в том, что unlick в UISlider, где я могу просто вызвать slider.valueчтобы получить его значение, я понятия не имею, как установить диапазон значений (макс. и мин.) и как получить конкретное значение из UIScrollView при его прокрутке.

1 Ответ

3 голосов
/ 02 ноября 2010

Я должен признать, что не уверен на 100%, как вы используете представление прокрутки в качестве слайдера, но вы можете использовать свойство contentOffset, чтобы получить «Точку, в которой источник представления содержимого смещен относительно источника представление прокрутки. "

Вы должны будете сделать некоторые математические расчеты, чтобы превратить это в значение, которое вы хотите, но это простые вещи. Предположим, что ваш вид прокрутки является горизонтальным и может быть прокручен до 400 пикселей в ширину. То есть, если contentOffset равен 0, то вы в начале, а если contentOffset 400px, то вы в конце. То, как вы использовали представление прокрутки, будет точно определять, как вы это решите, если вы в отчаянии, то вы можете просто напечатать значение contentOffset программным путем и эмпирически наблюдать за диапазоном.

В этом случае вы можете получить пропорцию расстояния между видами прокрутки, например:

CGFloat proportionOffset = scrollView.contentOffset/400.0f;

Если вы хотите смоделировать диапазон [startX, endX], тогда просто попробуйте:

CGFloat offset = startX + proportionOffset * (endX - startX);

ratioOffset заканчивается в диапазоне от 0 до 1, в 0, когда contentOffset равно 0, и в 1, когда contentOffset равно 400. Если, скажем, startX равно 15, а endX равно 35, то endX - startX равно 20. Если вы умножаете число в диапазоне от 0 до 1 на 20, тогда вы получите число в диапазоне от 0 до 20. Вот как далеко вы хотите пройти через свой диапазон. Но ваш диапазон не обязательно начинается с 0, поэтому вам нужно добавить значение startX.

С точки зрения эффективности целесообразно установить себя в качестве делегата для представления прокрутки и проверять новый contentOffset только при получении scrollViewDidScroll :. В противном случае вы проводите много опросов, которые просто не нужны и, в худшем случае, сильно мешают процессору спать (и, следовательно, уменьшают нагрев и экономят заряд батареи).

...