Как сделать «след» UISlider невидимым? - PullRequest
20 голосов
/ 11 ноября 2010

Я пытаюсь эмулировать функцию Apple «Slide to Unlock» в моем приложении.Я добираюсь до этой точки (изображение ниже), но, как вы можете видеть, «дорожка» UISlider видна и скрывает мой текст.Есть ли способ программно изменить атрибут, который сделает «дорожку» невидимой?

alt text

Пожалуйста, дайте мне знать, если вам нужен какой-либо мой код.

Заранее спасибо!

РЕДАКТИРОВАТЬ: Если я изменяю альфа ползунка на 0, он избавляется от моей скользящей кнопки, поэтому это не будет работать, если я не сделаю это неправильно.:)

Ответы [ 8 ]

26 голосов
/ 22 февраля 2013

вот еще более простой способ. Не нужно создавать изображения, просто создайте пустой класс UIImage: P

UIImage *clearImage = [[UIImage alloc] init];
[self.slider setMinimumTrackImage:clearImage forState:UIControlStateNormal];
[self.slider setMaximumTrackImage:clearImage forState:UIControlStateNormal];
25 голосов
/ 11 ноября 2010

На самом деле я только что понял это.Вот что я сделал:

UIImage *sliderMinimum = [[UIImage imageNamed:@"clearTrack.png"] stretchableImageWithLeftCapWidth:4 topCapHeight:0];
[slider setMinimumTrackImage:sliderMinimum forState:UIControlStateNormal];
UIImage *sliderMaximum = [[UIImage imageNamed:@"clearTrack.png"] stretchableImageWithLeftCapWidth:4 topCapHeight:0];
[slider setMaximumTrackImage:sliderMaximum forState:UIControlStateNormal];

clearTrack.png - просто четкое изображение слайдера, которое я сделал.

Теперь у меня есть это: ууу!alt text

6 голосов
/ 11 ноября 2010

Вероятно, нет способа скрыть дорожку;«слайд для разблокировки» не ведет себя как UISlider и, вероятно, является пользовательским элементом управления.Вы могли бы иметь возможность взломать ползунок, возможно, установив непрозрачность на низкое значение (0 сделает его скрытым, и он не будет получать прикосновения), но если вы пойдете по этому маршруту, у вас, вероятно, что-то сломается послеОбновление ОС.Apple не наклоняется назад для совместимости, как Microsoft.

Правильный способ сделать это с помощью пользовательского элемента управления.Это может показаться более трудоемким, чем использование UISlider, но это не так, если вы сравните его с тем временем, которое вы потратили и / или потратите на взлом UISlider.

Для этого: подкласс UIControl.Напишите свой собственный код для рисования, чтобы он выглядел правильно (вы, вероятно, можете использовать часть того, что вы делаете сейчас).Затем зарегистрируйтесь для событий касания, чтобы переместить маркер ползунка:

  • UIControlEventTouchDown: если он на дескрипторе, установите «движущийся» флаг
  • UIControlEventTouchDragInside: если установлен флаг перемещения, переместитеручка в положение касания;вы можете просто обновить переменную экземпляра, вызвать setNeedsDisplay, чтобы нарисовать ее в новой позиции.
  • UIControlEventTouchUpInside: если установлен флаг перемещения и дескриптор находится в конце, разблокируйте

Если выхотите имитировать настоящую ручку разблокировки, поиграйте с ней и посмотрите, как она себя ведет.Возможно, вам придется реагировать на события по-разному (что произойдет, если вы перетащите за пределы пути ползунка).Но вы должны быть в состоянии понять суть этого.

5 голосов
/ 28 января 2015

В Свифт:

slider.setMinimumTrackImage(UIImage(), forState: .Normal)
slider.setMaximumTrackImage(UIImage(), forState: .Normal)
3 голосов
/ 26 сентября 2016

Похоже, просто установив цвет оттенка, чтобы очистить ...

    [slider setMinimumTrackTintColor:[UIColor clearColor]];
    [slider setMaximumTrackTintColor:[UIColor clearColor]];
3 голосов
/ 11 ноября 2010

В ответ на поставленный вопрос вы можете установить прозрачный 1px png для минимального и максимального изображений дорожек.

2 голосов
/ 11 июля 2017

Ответ @ Arjay Waran - лучший на мой взгляд.

Вот его версия Swift 3.0.

slider.minimumTrackTintColor = UIColor.clear
slider.maximumTrackTintColor = UIColor.clear

Приветствия

0 голосов
/ 28 июля 2018

Из Story Board: -

выберите прозрачный цвет для Min Track и Max Track

enter image description here

...