Objective c NSColor渐变为NSColor

Objective c NSColor渐变为NSColor,objective-c,xcode,cocoa,nscolor,nsgradient,Objective C,Xcode,Cocoa,Nscolor,Nsgradient,好吧,长话短说: 我正在使用(嵌入到包中)FontAwesome 我在一些定制的NSButtons中使用它作为字体 在NSButton子类中,我想给它们上色,与Xcode选项卡项的上色方式完全相同 这就是我设置颜色的方式(作为简单的NSColor): 如何将其设置为NSGradient?好的,这是一个解决方案,适用于任何可能发现有用的人 第1步: 根据@Omz的命令,在NSColor上创建一个类别。在下面的代码中,您将看到它被重命名为colorFromGradient:,这仅仅是为了与常用

好吧,长话短说:

  • 我正在使用(嵌入到包中)FontAwesome
  • 我在一些定制的
    NSButton
    s中使用它作为字体
  • NSButton
    子类中,我想给它们上色,与Xcode选项卡项的上色方式完全相同

这就是我设置颜色的方式(作为简单的NSColor):


如何将其设置为
NSGradient

好的,这是一个解决方案,适用于任何可能发现有用的人

第1步:

根据@Omz的命令,在
NSColor
上创建一个类别。在下面的代码中,您将看到它被重命名为
colorFromGradient:
,这仅仅是为了与常用的Cocoa命名约定很好地结合在一起

第二步:

用渐变色重画标题

    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];
第三步:

享受结果。:-)


colorFromGradient:似乎不再是有效的API。
    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];