2010-11-11 4 views
19

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

alt text

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

Заранее благодарен!

EDIT: Если я изменил альфа-ползунок на 0, он избавится от моей скользящей кнопки, так что это не сработает, если я не сделаю это неправильно. :)

+0

Это против Руководства Human Interface Apple, повторить слайд, чтобы разблокировать пользовательский интерфейс. –

+0

@JackLawrence доказательство? – aqua

ответ

25

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

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

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

+0

Спасибо btw, я никогда не думал об этом методе. Это намного проще и быстрее, чем другие методы. – cgossain

+0

Красиво простое решение этой проблемы. –

+0

Вам даже не нужно предоставлять файл изображения - см. Другие ответы. – clearlight

6

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

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

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

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

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

+0

Отличный ответ, я попробую изменить непрозрачность до низкой настройки, и если это не сработает, мне придется попытаться сделать свой собственный контроль. Спасибо за ответ! –

+0

Хотя я также ответил, это правильный ответ. – Justin

3

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

+0

В этом проблема, как вы можете видеть в моем ответе выше. –

+0

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

26

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

UIImage *clearImage = [[UIImage alloc] init]; 
[self.slider setMinimumTrackImage:clearImage forState:UIControlStateNormal]; 
[self.slider setMaximumTrackImage:clearImage forState:UIControlStateNormal]; 
+0

он отлично работает для меня! –

+0

гениальный !!!!! –

5

В Swift:

slider.setMinimumTrackImage(UIImage(), forState: .Normal) 
slider.setMaximumTrackImage(UIImage(), forState: .Normal) 
+0

Хороший ответ, но я рекомендую вам удалить все после первого блока кода. Это очень касательно вопроса, а TL; DR - то, что использование одного или двух пустых изображений в порядке. – phatmann

3

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

[slider setMinimumTrackTintColor:[UIColor clearColor]]; 
    [slider setMaximumTrackTintColor:[UIColor clearColor]]; 
1

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

Heres the Swift 3.0 Версия его.

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

Приветствия

Смежные вопросы