NSGradient进入NSColor

时间:2014-10-14 10:20:09

标签: objective-c xcode cocoa nscolor nsgradient

好的,长话短说:

  • 我正在使用(嵌入到捆绑包中)FontAwesome
  • 我在某些自定义NSButton s
  • 中使用它作为字体
  • 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 个答案:

答案 0 :(得分:1)

好的,这是解决方案,适合任何有用的人......

第1步:

根据@Omz的great answerNSColor上创建一个类别。在下面的代码中,您将看到它重命名为colorFromGradient:,只是为了与通常的Cocoa命名约定很好地混合......

第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