2014-10-14 3 views
0

OK, Короче:NSGradient в NSColor

  • Я использую (встроенный в комплект поставки) FontAwesome
  • Я использую его в качестве шрифта в некоторых пользовательских NSButton ы
  • В NSButton подкласс Я хочу, чтобы цвет их, точно так, как вкладка элементы Xcode окрашены

Colour gradient Xcode

Это, как я устанавливаю цвет (как простой NSColor):

NSColor *color = [NSColor colorWithCalibratedRed:0.09 green:0.55 blue:0.90 alpha:1.0]; 
    NSMutableAttributedString *colorTitle = 
    [[NSMutableAttributedString alloc] initWithAttributedString:[self attributedTitle]]; 

    NSRange titleRange = NSMakeRange(0, [colorTitle length]); 

    [colorTitle addAttribute:NSForegroundColorAttributeName 
         value:color 
         range:titleRange]; 

    [self setAttributedTitle:colorTitle]; 

Как я могу установить его на NSGradient?

ответ

1

ОК, вот решение, для тех, кто может найти полезным ...

Шаг 1:

Создать категорию на NSColor, на основе great answer по @Omz. В приведенном ниже коде, вы увидите, что он переименован в colorFromGradient:, исключительно для того, чтобы хорошо перемешать с помощью обычных соглашений об именовании какао ...

Шаг 2:

перерисовки титул с градиентом цвета

NSColor* gS = [NSColor colorWithCalibratedRed:0.07 green:0.47 blue:0.87 alpha:1.0]; 
    NSColor* gE = [NSColor colorWithCalibratedRed:0.12 green:0.64 blue:0.94 alpha:1.0]; 
    NSGradient* g = [[NSGradient alloc] initWithStartingColor:gE endingColor:gS]; 
    NSColor *color = [NSColor colorFromGradient:g]; 

    NSMutableAttributedString *colorTitle = 
    [[NSMutableAttributedString alloc] initWithAttributedString:[self attributedTitle]]; 

    NSRange titleRange = NSMakeRange(0, [colorTitle length]); 

    [colorTitle addAttribute:NSForegroundColorAttributeName 
         value:color 
         range:titleRange]; 

    [self setAttributedTitle:colorTitle]; 

Шаг 3:

Наслаждайтесь результат. :-)

NSGradient to NSColor applied to FontAwesome

+0

colorFromGradient: не кажется, действительный API больше. – NSRover

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