【问题标题】:Convert NSGradient to NSColor将 NSGradient 转换为 NSColor
【发布时间】:2013-04-22 03:40:50
【问题描述】:

是否可以将 NSGradient 转换为 NSColor

- (void) viewWillDraw {
    NSGradient *grad = [[NSGradient alloc] initWithStartingColor:[NSColor lightGrayColor]    endingColor:[NSColor darkGrayColor]];
    [super setBackgroundColor:*gradient*;
}

这是我的方法,我希望能够将 NSGradient 作为 NSColor 传递,这显然我不能,有什么方法可以将其转换为一个?

【问题讨论】:

    标签: cocoa nscolor nsgradient


    【解决方案1】:

    在 10.8 上,您可以按以下顺序创建:

    1. 一个可以随心所欲地绘制渐变的块。
    2. An image that is backed by the block.
    3. A color that repeats the image as a pattern.

    通过这种方式,您可以创建一种看起来像任何东西的颜色,包括渐变。

    也就是说,如果您尝试让渐变适应背景的大小(通过使用传递给块的矩形)并且背景是滚动视图中的文本视图,则这可能无法正确调整窗口大小. (当我不久前尝试它时,图案并没有重新绘制块;它只是平铺,至少在一个维度上看起来很奇怪。)如果你的渐变或窗口的大小是固定的,那么你就不会遇到这个问题.

    【讨论】:

    • 如何创建渐变背景的图片?
    • @benj9a4:您通过创建由绘制渐变的块支持的图像来创建由渐变支持的图像。
    【解决方案2】:

    NSGradient 不能转换为 NSColor。

    NSGradient 类提供对绘制渐变填充的支持 颜色,在 Quartz 中也称为阴影。这个类提供 绘制径向或线性(轴向)梯度的便捷方法 矩形和 NSBezierPath 对象。

    当您想将 viewBackground 设置为效果(渐变效果)时,您需要执行以下操作:

    [grad drawInRect:<the rect of your view> angle:270]; //angle is upto your requirement,
    

    【讨论】:

    • @PeterHosey:我们不能在 drawRect 中这样做吗?
    • drawRect: 是一个更好的地方。如果提问者是从一个单元格中提取这个,另一个好地方是drawInteriorWithFrame:inView:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多