2009-04-16 3 views
10

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

Растяжимая область находится между двумя . Конечные колпачки определяют части изображения, которые остаются как есть и не растянуты. Растяжимая область - это 1-точечная широкая зона между торцевыми крышками, которая может быть , реплицирована, чтобы изображение появилось дольше.

Теперь проблема заключается в том, что моя растяжимая область должна быть более 1-точечной ширины. (Это шаблон) К сожалению, 1-точечная ширина, по-видимому, жестко закодирована в SDK.

У кого-нибудь есть идея, как обойти это? Или мне придется написать свой собственный слайдер с нуля для этого?

ответ

1

Думаю, вам придется написать свой собственный слайдер, чтобы сделать это. Кажется, нет (публичного) API для изменения поведения UISlider в отношении растяжимого региона.

1

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

+1

Это не проблема. Проблема в том, что для растягивания изображения используется только 1-точечная ширина. – tcurdt

+0

Но разве вы не могли просто использовать изображение, не подлежащее растяжению?Просто создайте изображение шириной 480 пикселей, которое выглядит так, как вы хотите, и используйте это изображение. –

+0

Это работает, если у вас есть фиксированная ширина для вашего слайдера. Если вам нужна переменная ширина, вы можете сделать изображения большими, чем требуется самый большой размер, но затем минимальный конец слайдера, когда большой палец находится на минимуме, и максимальный конец слайдера, когда большой палец максимален, не отображать конечную часть их изображений. Изображения просто срезаны квадратом в точке, где они будут выходить за пределы ползунка. – arlomedia

0

Необходимо выполнить инициализацию изображения с помощью растягивающейсяImageWithLeftCapWidth: topCapHeight :. leftCapWidth и topCapHeight являются свойствами только для чтения объектов изображений, но с помощью этой функции вы можете их установить. Вы устанавливаете только левый и верхний, потому что левая и правая крышки имеют одинаковый размер, а верхний и нижний тоже одинаковые. Таким образом, чтобы использовать пользовательский слайдер с левым размером 5 пикселей, вам нужно иметь изображение шириной 11 пикселей по любой требуемой высоте: 5 для левой крышки, шириной 1 пиксель, растянутой для дорожки, и еще 5 для права. Не играя с этим, я не знаю, работает ли с помощью topCapHeight больше 0, но я подозреваю, что это не вызовет много проблем.

+0

Пожалуйста, перечитайте. Проблема в 1 пикселе. – tcurdt

+0

К сожалению. Я думал, что он использует только 1 пиксель для ваших левых и правых концов. Чтение документации так звучит, как будто вам придется сворачивать самостоятельно. – HitScan

12

Просто используйте прозрачные изображения в качестве дорожки изображений, и поставить UIImageView ниже :)

+0

Вы можете просто установить '[self setMinimumTrackImage: nil forState: UIControlStateNormal]; [self setMaximumTrackImage: nil forState: UIControlStateNormal]; вместо этого. Если вы это, вам также нужно будет установить '[self setThumbImage: [UIImage imageNamed: @" whatever.png "] forState: UIControlStateNormal];' тоже. –

+7

Передача nil не работает, потому что по умолчанию по умолчанию используется изображение по умолчанию, когда ничего не установлено. Вы действительно должны использовать прозрачные изображения. –

+0

Это только iOS 5+ ... –

0

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

2

Я знаю, что это конец ответа.

Но я решил эту проблему, как следующее:

4 ширина круглой крышки в файле PNG.

UIImage *minimum = [UIImage imageNamed:@"slider_minimum.png"]; 
[slider setMinimumTrackImage:[minimum stretchableImageWithLeftCapWidth:4 topCapHeight:0] 
         forState:UIControlStateNormal]; 
+0

'strechableImageWithLeftCapWidth:' устарел, 'resizableImageWithCapInsets:' должен использоваться вместо этого все это упрощает. – Q8i

0

Чтобы сделать ваш пользовательский UISlider, у вас есть много способов. В зависимости от того, какую настройку вы хотите. Есть стандартные параметры, которые можно настроить, чтобы настроить UIslider, как следующее: setThumbImage: Форстат: setMinimumTrackImage: Форстат: setMaximumTrackImage: Форстат: Если вы хотите в дальнейшей настройку вы можете передать ссылку ниже https://medium.com/@0209neha/creating-a-custom-uislider-7756bf898832#.o1l4qhymo https://github.com/0209Neha/ExploringSlider