Как сделать трек UISlider невидимым?

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

альтернативный текст

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

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

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


person sudo rm -rf    schedule 11.11.2010    source источник
comment
Копирование слайда для разблокировки пользовательского интерфейса противоречит Руководству Apple по человеческому интерфейсу.   -  person Jack Lawrence    schedule 22.02.2013


Ответы (8)


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

UIImage *clearImage = [[UIImage alloc] init];
[self.slider setMinimumTrackImage:clearImage forState:UIControlStateNormal];
[self.slider setMaximumTrackImage:clearImage forState:UIControlStateNormal];
person Alex the Ukrainian    schedule 22.02.2013

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

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 — это просто четкое изображение слайдера, которое я сделал.

Теперь у меня есть это: ура! альтернативный текст

person sudo rm -rf    schedule 11.11.2010
comment
Спасибо, кстати, я никогда не думал об этом методе. Это намного проще и быстрее, чем другие методы - person Christian Gossain; 11.11.2010
comment
Красивое простое решение этой проблемы. - person David Snabel-Caunt; 18.08.2011
comment
Вам даже не нужно предоставлять файл изображения - см. другие ответы. - person clearlight; 28.01.2015
comment
На iPad (iOS 8) все еще есть изображение (возможно, тень), нарисованное для минимальной дорожки. - person OrangeDog; 18.08.2015

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

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

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

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

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

person benzado    schedule 11.11.2010
comment
Отличный ответ, я попробую изменить непрозрачность на низкую настройку, и если это не сработает, мне придется попытаться сделать свой собственный контроль. Спасибо за ответ! - person sudo rm -rf; 11.11.2010

В Свифте:

slider.setMinimumTrackImage(UIImage(), forState: .Normal)
slider.setMaximumTrackImage(UIImage(), forState: .Normal)
person clearlight    schedule 28.01.2015
comment
Хороший ответ, но я рекомендую вам удалить все после первого блока кода. Это очень касается вопроса, и TL; DR заключается в том, что использование одного или двух пустых изображений — это нормально. - person phatmann; 06.04.2015

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

person Justin    schedule 11.11.2010
comment
Это именно проблема, как вы можете видеть в моем ответе выше. - person sudo rm -rf; 11.11.2010
comment
Вы, должно быть, не увидели мой ответ вовремя. Пожалуйста, оставьте ответ Бензадо выбранным. Такой подход верен для того, чего вы пытаетесь достичь. - person Justin; 11.11.2010

Похоже, просто установка цвета оттенка на прозрачный делает это ...

    [slider setMinimumTrackTintColor:[UIColor clearColor]];
    [slider setMaximumTrackTintColor:[UIColor clearColor]];
person Arjay Waran    schedule 26.09.2016

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

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

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

Ваше здоровье

person iOSer    schedule 11.07.2017

Из раскадровки: -

выберите чистый цвет для Min Track и Max Track

введите здесь описание изображения

person Bijender Singh Shekhawat    schedule 28.07.2018