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:
вместо использования подпредставлений, ваш подкласс, безусловно, будет выглядеть неправильно.