2013-04-29 2 views
17

Мне нужно реализовать пользовательский переключатель в проекте. В настоящее время я обнаружил, что мы не можем изменять с помощью UISwitch, чтобы реализовать, как показано на рисунке ниже. Я следил за сообщениями и просматривал через stackoverflow и другие блоги, но не нашел решение по своему усмотрению. Один из способов - перейти с UISegmented control, как в сообщении this, но это тоже не решает мою проблему.Пользовательский UISwitch с изображением

enter image description here

Заранее спасибо за любую помощь

+0

В чем проблема с UISegmentedControl? Я думаю, что это способ пойти на то, что вы пытаетесь сделать. – Odrakir

+3

Попробуйте следующее: https://github.com/twotoasters/TTSwitch – Desdenova

+0

Ваши ответы здесь: [SwiftySwitch] (https://github.com/Sethmr/SwiftySwitch) – Sethmr

ответ

21

Что не так сложно создать собственный переключатель? UISwitch - это элемент управления, по существу, просто представление, которое отправляет сообщение - с двумя состояниями. Вы можете настроить его так:

  • вид контейнера: простой вид со скругленными углами (установить cornerRadius слоя вида) и цвет фона

  • левое изображение: вид в изображение, которое отображается изображение, которое вы хотите показать на левой стороне, то есть галочку для вашего примера

  • правое изображение: изображение, которое отображает изображение, которое вы хотите показать с правой стороны, то есть отметку X для вашего примера

  • слайдер: вид в изображение, показывающее ползунок часть переключателя, устанавливается выше остальных двух точек зрения изображения

Когда пользователь вводит или пойло контроль, использовать Core Animation, чтобы переместить ползунок в другую сторону переключитесь и обновите состояние элемента управления и быстро перейдете к цвету фона для нового состояния. Отправьте действие элемента управления цели.

+2

Спасибо! Я получил решение из вашего ответа. –

+0

Это не совсем так, красивый эффект, который Apple произвел, когда вы переключаетесь, не так просто достичь. Его нелинейная анимация с нелинейной формой. – Curnelious

+0

Да, я знаю, что Apple, упорно трудились, чтобы сделать UISwitch выглядеть так же верно, но это все, что я написал выше, не аннулирует. Это зависит от OP, чтобы решить, сколько работы нужно внести в анимацию перехода, но инструменты, доступные в Core Animation, упрощают реализацию того, что я описал очень приятным образом. – Caleb

1

Похоже, что вы просто хотите, чтобы ваш контроль, чтобы иметь только два состояния - включаются и выключаются.

Простым способом для этого было бы создать 2 png-изображения и использовать пользовательский UIButton с фоновым изображением и просто заменить эти 2 изображения каждый раз при нажатии кнопки.

Это то, что вы пытаетесь сделать или я что-то неправильно понял?

+0

Я предполагаю, что нужно было скопировать – makaron

+0

Я пытаюсь как это было сделано в приложении для обмена видео в Twitter «Vine». Фактически заголовок, показанный на изображении, плавно скользит в этом приложении. Думаю, добавление кнопки для изменения состояния не приведет к плавной прокрутке заголовка. Цените свой ответ! –

+0

Хорошо, тогда я думаю, вам понадобится другой подход. Пожалуйста. Удачи вам в этом и сообщите нам, если вы нашли способ сделать это :-) – gasparuff

18

Как gasparuff говорит, вы также можете сделать это с UIButton, просто установить изображения:

[button setImage:[UIImage imageNamed:@"image_on"] forState:UIControlStateSelected]; 
[button setImage:[UIImage imageNamed:@"image_off"] forState:UIControlStateNormal]; 

и когда она постучала просто переключать выбранное свойство.

- (void) buttonTap { 
    button.selected = !button.selected; 
} 

который автоматически изменит изображения.

+3

Не могу видеть, где он говорит, что он должен оживить. – Odrakir

1

Вы знаете о -[UISwitch setOnImage:] и -[UISwitch setOffImage:], справа? Также -[UISwitch setTintColor]. Единственный недостаток, который я вижу, заключается в том, что сам коммутатор будет стандартным переключателем iOS (круглая кнопка), но в противном случае это было бы самым iOS-подобным решением.

При реализации вашего собственного on/offImage помните о ограничениях по размеру, а также о том, что сторона изображения к переключателю является вогнутой. tintColor можно использовать, чтобы остальные переключатели отображали вашу цветовую схему. Вы можете отслеживать событие valueChanged, чтобы изменить цвет оттенка.

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

+1

Это только iOS 6+ –

+2

Исправить. iOS6 имеет 92% -ный прием (июнь 2013 г.) и восхождение. – Olie

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