2011-05-25 2 views
3

Apple делает это для большей части UIKit. Вы просто передаете элемент tintColor для элементов, и он автоматически генерирует хороший (в большинстве случаев в любом случае) градиент от него.Создайте CGGradient с динамического оттенкаЦвет

Я столкнулся с this gloss gradient function, но результат далек от того, что я ищу. Я знаю, что есть также UIColor extensions, которые добавляют такие методы, как «lighterColor» и «darkerColor», но я сомневаюсь, что они были созданы для создания градиентов (и, следовательно, создавали бы унылые градиенты).

Есть ли какой-либо сторонний класс или функция там, что делает это аналогично тому, как Apple это делает?

ответ

4

Есть много способов сделать динамическое тонирование, но самый простой способ - начать с рисования черно-белого изображения с предварительным оттенком, затем нарисуйте цвет оттенка сверху, используя kCGBlendModeOverlay. Режим наложения «наложения» работает как Photoshop и особенно полезен для тонирования.

Вот как мы рисуем на заказ подкрашенной панели навигации:

- (void)drawRect:(CGRect)rect { 
    [[UIImage imageNamed:@"NavBar.png"] drawInRect:rect]; // grayscale untinted version 
    UIColor *tint = [UIColor colorWithRed:1 green:0.5 blue:0.5 alpha:1]; // arbitrary 
    [tint set]; 
    UIRectFillUsingBlendMode(rect, kCGBlendModeOverlay); 
} 

Вы можете просмотреть оттенок цвет непосредственно в Photoshop, просто создавая слой с цветом как сплошная заливка с режимом наложения смеси.

Специальная техника Apple для тонирования UINavigationBar и друзья, кажется, представляют собой комбинацию оттенков цвета и наложения предварительно визуализированных градиентных изображений с именами, такими как «UITintedTopBarHighlightFlat.png», найденные в файле художественных работ системы.

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