绘制一个Scrim("模糊透明矩形")在NSAttributedString Text下

时间:2015-04-15 17:35:44

标签: ios objective-c core-graphics nsattributedstring core-text

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

我首先通过真正模糊阴影来尝试这一点,但是使用薄文本它实际上并不可见。我想我需要以某种方式在文本后面绘制一个模糊/阴暗的矩形。我认为有一些方法可以用CoreGraphics / CoreText绘制它。由于我主要处理的是OpenGL,因此我在绘制机智方面不是很有经验。

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

1 个答案:

答案 0 :(得分:2)

使用CALayer shadowPath属性可以轻松实现此目的。正常使用情况如下:

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

在您的情况下,听起来您需要在标签周围放置一个更大的框,因此您需要更改传递给+bezierPathWithRect:的矩形。该路径在图层的坐标空间中指定(即左上角为0,0),因此如果您想要一个在标签左侧开始50pt并且在30pt以上,并且尺寸为200x100pt的方框,那么您可以相反:

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

...然后使用shadowRadiusshadowOpacity属性来满足您的口味。