从动态tintColor生成CGGradient



Apple对大部分UIKit都是这样做的。你只需将一个tintColor传递给元素,它就会自动从中生成一个漂亮的(在大多数情况下)渐变

我遇到了这个光泽梯度函数,但结果与我想要的相去甚远。我知道也有UIColor扩展添加了"lighterColor"one_answers"darkerColor"等方法,但我怀疑它们是用来生成渐变的(因此会产生模糊的渐变)。

有没有任何第三方类或功能以类似于苹果的方式做到这一点?

有很多方法可以进行动态着色,但最简单的方法是先绘制预渲染的灰度图像,然后使用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中直接预览色调,只需使用叠加混合模式创建一个颜色为实心填充的层。

苹果公司为UINavigationBar和朋友着色的特殊技术似乎是色调填充加上预渲染渐变图像的叠加,这些图像的名称如系统艺术文件中的"UIIntedTopBarHighlightFlat.png"。

相关内容

  • 没有找到相关文章