Настройка iOS UISlider. Отображение выделения из центра - PullRequest
3 голосов
/ 01 февраля 2012

Я пытаюсь создать слайдер для своего приложения, аналогичный показанному ниже.Я пытался сделать это в интерфейсе, но не повезло.Слайдер по умолчанию всегда показывает подсветку слева.Как этого достичь?

enter image description here

1 Ответ

8 голосов
/ 01 февраля 2012

UISlider не имеет встроенной поддержки того, что вы хотите сделать.Вероятно, лучше написать собственный подкласс UIControl или UIView, а не пытаться настроить UISlider.

Но если вы действительно хотите настроить UISlider, вот что вам нужно знать.

A UISlider имеет три частных UIImageView подпредставления: одно для большого пальца, одно для дорожки слева от большого пальца и одно для дорожки справа от большого пальца.Когда вы перетаскиваете большой палец или изменяете значение ползунка программным способом, ползунок отправляет себя layoutSubviews.В своем методе layoutSubviews он изменяет кадры трех представлений изображений в соответствии с новым значением ползунка.

Не следует связываться с частными подпредставлениями UISlider.Они могут измениться в будущем выпуске iOS.Вместо этого вы хотите эффективно отключить подпредставления изображения дорожки, чтобы вы могли нарисовать собственную дорожку, и оставить подпредставление изображения большого пальца в покое, чтобы UISlider позаботился о показе большого пальца.

Вам понадобится подклассUISlider.В вашем подклассе вам нужно будет сделать несколько вещей:

  • Вам нужно установить свои свойства minimumValueImage и maximumValueImage на прозрачные UIImage.Это эффективно отключит частные UISlider подпредставления, которые рисуют обычную дорожку, состоящую из двух частей.

  • Вам нужно предоставить себе три новых свойства UIImage: leftEndImage, rightEndImage и filledImage.Вы будете использовать их для заполнения трех разных частей вашего трека.

  • Вам нужно дать себе три UIImageView подпредставления - по одному для каждой из трех частей трека..

  • Вам нужно переопределить layoutSubviews.В вашем методе вам нужно вызвать [super layoutSubviews], а затем установить кадры трех ваших подпредставлений изображения в соответствии с текущим значением ползунка.

Это может быть немного сложнее, если выВы новичок в программировании на iOS.Удачи.

ОБНОВЛЕНИЕ

На самом деле мне приходит в голову, что вы можете установить minimumValueImage в левое-правое зеркало изображения по умолчанию maximumValueImage, так что UISlider будет рисоватьоба белых конца вашего трёхчастного трека.Тогда вам просто нужно добавить одно UIImageView ваше собственное подпредставление, чтобы нарисовать синюю часть дорожки.

Однако вы сделаете это, если вы подклассом UISlider и вставляете подпредставления, вы зависите от UISlider реализация не сильно меняется.Например, если будущая версия UISlider будет рисовать дорожку и большой палец непосредственно в drawRect: вместо использования подпредставлений, ваш подкласс, безусловно, будет выглядеть неправильно.

...