Core Graphics 中的内部阴影

Posted

技术标签:

【中文标题】Core Graphics 中的内部阴影【英文标题】:Inner shadow in Core Graphics 【发布时间】:2011-01-11 06:21:55 【问题描述】:

我想在 Core Graphics 中做一些类似于 Photoshop 内阴影效果的东西。如果我用这种效果绘制/填充路径,我希望得到类似于以下内容:

【问题讨论】:

如何使用您的 InnerShadowDrawing.m 在 UILabel 的文本上绘制内部阴影? 【参考方案1】:

以下是制作此图像所需创建的图层,从后到前:

基色,在本例中为白色背景。

影子。

投射阴影的形状。这是通过找到内部形状的边界框,将该框扩大超过阴影的宽度,然后在具有内部形状的框上切割一个孔来实现的。

用内部形状剪裁这些。

然后最后绘制周围的彩色形状,在本例中是一个内部形状被剪掉的矩形。

注意:根据预期的外观,投射阴影的形状可能与填充前景色的形状相同,也可能不同。内部形状和外部形状之间的薄部分会减少阴影。如果不需要这种效果,则需要更大的外部形状才能获得一致的内部阴影。此外,如果阴影超出外部形状,则需要显式剪切阴影。

要绘制一个中间有孔的形状,例如这个示例形状,您需要绘制一个包含两个子路径的路径。一个子路径是外部盒子,另一个是内部不规则形状。如果您使用默认的非零绕组数规则,您需要指定与内部不规则形状相反方向的外框点。例如,按顺时针顺序指定外框的点将需要按逆时针顺序指定内部形状的点。详情请参阅Quartz 2D Programmer's Guide's section on Paths。

【讨论】:

谢谢,但我的主要问题是:您如何以所需的方式“剪切”Core Graphics 中的内容? 我编辑了我的答案以添加更多关于绘制带孔路径的信息。【参考方案2】:

石英内嵌/内阴影

将此代码放到 xcode 游乐场中,您就可以上路了:

https://gist.github.com/eonist/520fa35958c123ad6840

【讨论】:

以上是关于Core Graphics 中的内部阴影的主要内容,如果未能解决你的问题,请参考以下文章

使用 Core Graphics 绘图在 Retina 显示屏上看起来很厚实

VC里用graphics(MFC的走)

带有 Core Graphics 绘图的 Core Animation

iOS Core Graphics 中的“形状爆裂”笔划

UILabel 中的内部阴影

R语言使用econocharts包创建微观经济或宏观经济图tax_graph函数可视化税收图(Tax graph)使用shaded参数添加阴影区域