我想在某些文字上绘制两个不同的阴影来创建浮雕效果。这是我drawInRect
中用第一个阴影绘制文本的部分(所有使用的变量都已定义):
CGContextSetShadowWithColor(context, textInnerShadowOffset, textInnerShadowBlurRadius, textInnerShadowColor.CGColor);
[textColor setFill];
[self.text drawInRect:rect withFont:self.font lineBreakMode:self.lineBreakMode alignment:self.textAlignment];
但现在我面临着绘制第二个阴影的问题。我假设我需要更改阴影并再次绘制文本,但我需要这样做而不添加另一个文本副本。
如何在不真正绘制文本的情况下绘制文本?将填充颜色更改为clearColor
不起作用。我见过人们使用剪贴蒙版,但AFAICT只能用于简单的形状,而不是文字。
或者,是否有更简单的方法在同一文本上绘制两个阴影?
答案 0 :(得分:1)
两个选项,具体取决于您想要的确切效果:
如果您希望第一个“上部”阴影也影响其下方的第二个“较低”阴影,请使用transparency layer。
CGContextBeginTransparencyLayer
CGContextEndTransparencyLayer
(请注意,透明层可能非常昂贵。最好调用CGContextBeginTransparencyLayerWithRect
并尽可能小地传入。)
设置具有额外大偏移的阴影,大小足以使您可以在上下文边界之外绘制文本并使阴影落在正确的位置。这样你只会看到阴影,但不能看到文字。
对于每个“较低”的阴影,从后到前重复1-3。然后,绘制文本和“最上面”的阴影,不带偏移量。