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

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

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

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

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

最佳答案

使用 CALayer 可以很简单地做到这一点 shadowPath属性(property)。正常用法如下所示:

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 属性。

关于ios - 在 NSAttributedString 文本下绘制稀松布 ("Blurry Transparent Rectangle"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29657008/

相关文章:

objective-c - 尝试使用 Xcode 的新 UI 测试运行多个测试失败

水平滚动方向的 iOS7 UICollectionView 不起作用

objective-c - 获取正确的 Node Json objective c

ios - 在 iOS 中替换图像的特定颜色

ios - CGContext:如何删除位图上下文之外的像素(例如 kCGBlendModeClear)?

iphone - 将 UITextField 添加到cameraOverlay

ios - 单点登录配置文件在 iPad 和 Safari 中无法正常工作

ios - 如何使用 drawRect 方法检测绘制项目上的触摸事件?

ios - 设备连接到Xcode时,应用工作正常,但在特定位置安装ipa时失败

ios - 为结构存储对象