从动态tintColor生成CGGradient

时间:2011-05-25 04:31:43

标签: iphone user-interface core-graphics

Apple为大多数UIKit做到这一点。您只需将tintColor传递给元素,它就会自动生成一个很好的(在大多数情况下无论如何)渐变。

我遇到了this gloss gradient function,但结果远非我想要的。我知道还有UIColor extensions添加了诸如“lighterColor”和“darkerColor”之类的方法,但我怀疑它们是否会产生渐变(因此会产生难看的渐变)。

是否有任何第三方类或功能以类似于Apple的方式执行此操作?

1 个答案:

答案 0 :(得分: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”等名称。