Как подкрасить UIButton? - PullRequest
       13

Как подкрасить UIButton?

7 голосов
/ 23 сентября 2008

Я нахожусь в процессе добавления пользовательских кнопок в свой пользовательский интерфейс iPhone и хочу, чтобы они выглядели блестящими из приложений Apple. У меня хорошее стеклянное изображение по умолчанию, но я не хотел бы иметь отдельное изображение для каждого оттенка (красный, зеленый, синий и т. Д.).

Можно ли загрузить PNG в градациях серого и настроить его на нужный мне цвет? А еще лучше, есть ли способ придать Apple гладкий вид, не загружая пользовательские изображения вообще?

Ответы [ 6 ]

7 голосов
/ 11 февраля 2011

Немного поздно, но в случае, если кто-то вроде меня ищет информацию такого типа: используйте UISegmentedControl с одной кнопкой, установите ее как momentary и установите ее tintColor. Таким образом, не нужно готовить столько PNG, сколько у вас есть цветов, а фреймворк позаботится обо всем рендеринге за вас.

Пример:

UISegmentedControl *cancelButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Cancel"]];
[cancelButton setSegmentedControlStyle:UISegmentedControlStyleBar];
[cancelButton setTintColor:[UIColor colorWithRed:0.8 green:0.3 blue:0.3 alpha:1.0]];
[cancelButton setMomentary:YES];
[cancelButton addTarget:self action:@selector(didTapCancel:) forControlEvents:UIControlEventValueChanged];
[self addSubview:cancelButton];
[cancelButton release];
6 голосов
/ 29 октября 2008

На отличном сайте "Какао с любовью" есть образец: Рисование градиентов глянца в CoreGraphic

2 голосов
/ 24 сентября 2008

Я не знаю однострочного способа, но вы могли бы получить желаемый эффект, взяв изображение в градациях серого по умолчанию и соединив его (т.е. нарисовав его поверх) сплошным цветом. Если вы посмотрите документацию Core Graphics, то увидите, что существует более десятка различных методов композитинга (например, Color Burn), и некоторая их комбинация может дать желаемый эффект.

1 голос
/ 23 сентября 2008

Я не знаю о пользовательском интерфейсе iPhone, но вы можете использовать один PNG для цветной графики.

т.е. Оба логотипа (вверху слева) на этих страницах:

Продукты

Магазины

Используйте это PNG

альтернативный текст http://47degrees.com/images/logos/47_degrees.png

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

0 голосов
/ 05 сентября 2011

Я сделал это, и это работает довольно хорошо:

iOS: применение фильтра RGB к оттенкам серого PNG

Однако, это обман, это добавление, поэтому (например) для красного компонента каждого пикселя, R_dest = R_src + R_tint

Если вам нужен детальный контроль, например, вы можете извлечь значение шкалы серого для каждого пикселя путем усреднения компонентов RGB (с соответствующим взвешиванием), а затем умножить это значение на ваш оттенок, чтобы результирующий цвет был оттенки серого (Sr, Sg, Sb) * {Tr, Tg, Tb}

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

Проблема с восстановлением UIImage из байтовых данных RGBA

Эта библиотека сделала все для вас, это не самый эффективный маршрут, но она выполняет свою работу. iirc он использует malloc, когда ему следует использовать calloc.

0 голосов
/ 08 ноября 2010

Я закончил тем, что создал свою собственную пользовательскую кнопку, которая точно соответствует рендерингу, используемому в кнопке «Удалить контакт» в представлении редактирования контактов.

Для тех, кто заинтересован, его можно найти на github на

PFTintedButton

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...