从动态tintColor生成CGGradient

问题描述

| Apple对大多数UIKit都执行此操作。您只需将tintColor传递给元素,它就会自动从中生成一个漂亮的(无论如何在大多数情况下)渐变。 我遇到了这个光泽渐变函数,但结果与我要找的东西相去甚远。我知道也有UIColor扩展添加了诸如\“ lighterColor \”和\“ darkerColor \”之类的方法,但是我怀疑它们是用来生成渐变的(因此会产生难看的渐变)。 那里有没有第三方的类或功能,其执行方式与Apple相似?     

解决方法

有很多方法可以进行动态着色,但最简单的方法是从绘制预渲染的灰度图像开始,然后使用
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中预览色调颜色,只需使用叠加混合模式创建一个颜色作为纯色填充的图层即可。 苹果公司为ѭ2和朋友设置色彩的特殊技术似乎是将色彩填充与预先渲染的渐变图像叠加在一起的组合,这些渐变图像的名称类似于在系统图稿文件中找到的\“ UITintedTopBarHighlightFlat.png \”。