在 NSAttributedString 文本下绘制稀松布 ("Blurry Transparent Rectangle")

Drawing a Scrim ("Blurry Transparent Rectangle") Under NSAttributedString Text

我将文字放在各种图片的顶部并遇到 this article on overlaying text on images,其中 建议在文字的边界周围放置模糊的深色矩形,以帮助它从图片中脱颖而出。 基本上,好像文本的阴影是一个矩形。他们称之为稀松布。

我首先通过真正模糊阴影来尝试这个,但是对于细文本它真的不可见。我想我需要以某种方式在文本后面绘制一个 blurry/shadowy 矩形。我认为有一些方法可以用 CoreGraphics/CoreText 绘制它。由于我主要处理的是 OpenGL,因此我在使用这些中的任何一个方面都不是很有经验。

关于在绘制 NSAttributedStrings 时尝试创建模糊矩形阴影的任何建议?我能否以某种方式使阴影来自另一个对象(如矩形)而不绘制该对象。

使用 CALayer shadowPath 属性 有一种非常简单的方法可以做到这一点。正常用法如下所示:

myLabel.layer.shadowPath = [UIBezierPath bezierPathWithRect:myLabel.layer.bounds].CGPath;
myLabel.layer.shadowRadius = 10;
myLabel.layer.shadowOpacity = 0.5;

在您的情况下,听起来您希望标签周围有一个更大的框,因此您需要更改传递给 +bezierPathWithRect: 的矩形。该路径在图层的坐标 space 中指定(即左上角为 0,0),因此如果您想要一个从标签左侧 50pt 和上方 30pt 开始且大小为 200x100pt 的框,你会这样做:

myLabel.layer.shadowPath = [UIBezierPath bezierPathWithRect:CGRectMake(-50, -30, 200, 100)].CGPath;

...然后根据您的喜好使用 shadowRadiusshadowOpacity 属性。