Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

Немного поздно, но на случай, если кто-то вроде меня будет искать такую ​​информацию:использовать 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];

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

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

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

Продукты

Магазины

Использовать это PNG

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

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

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

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

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

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

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

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

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

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

Кому интересно, его можно найти на github по адресу

ПФтинтедбуттон

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top