如何在UITextView中为文本添加轮廓?

3

我是iOS文本编程的新手,目前有些困惑。我正在创建一个示例项目来学习如何制作一个lolcat应用程序(从有趣的东西开始!)。

我有一张带有猫的UIImage,并通过在其上放置一些文本的UITextView来实现。

最终我想要的效果是这样的:

lolcat

当我将文本放在UILabel中时,我成功地做到了这一点。我使用了我在Stack Overflow上找到的代码,该代码使用了drawTextInRect来完成魔术操作。

现在,我想在UITextView中做同样的事情(我想能够滚动文本)。

**编辑:** 所以这是我目前尝试的:

var foo = NSAttributedString(string: text, attributes: [
        NSStrokeColorAttributeName : UIColor.blackColor(),
        NSForegroundColorAttributeName : UIColor.whiteColor(),
        NSStrokeWidthAttributeName : NSNumber(float: -4.0),
        NSFontAttributeName : UIFont.systemFontOfSize(30.0)
 ])

这将为我生成如下结果:

输入图像描述

如果现在将描边宽度加倍至-8.0,则会得到如下结果,个人认为看起来相当糟糕。似乎存在描边宽度和可以看到的填充量之间的权衡。理想情况下,我希望描边只是变宽而不吞噬白色文本。

输入图像描述


2
请注意:如果您要对我的问题进行负评,应该留下评论解释原因。没有评论的负评对我没有任何启发作用。 - bitops
我的问题是UITextView当然不像UILabel一样提供相同的钩子。我不明白你的意思。它们都允许您使用NSAttributedString,并且使用NSAttributedString很容易实现。 - matt
你的问题标题和内容有点不相关。标题问的是如何创建轮廓文本,但是内容似乎在问如何在图像上绘制文本。请重新表述以使其更清晰。 - wcd
你有找到解决方法吗?我也遇到了同样的问题... - Mars
2个回答

3
你需要了解NSAttributedString。可以为字母添加轮廓描边:

https://developer.apple.com/library/ios/documentation/UIKit/Reference/NSAttributedString_UIKit_Additions/#//apple_ref/doc/constant_group/Character_Attributes

使用NSStrokeColorAttributeNameNSStrokeWidthAttributeName来配置轮廓线描边。
一旦你有了带属性的字符串,你可以将它放在标签中,放在文本视图中,或直接绘制它,随意选择。

enter image description here

如果您添加一些扩展和微小的阴影,效果会更好:

enter image description here


我在我的帖子中提到这是在iOS上,但你给我链接了Mac开发者文档。不过还是谢谢你提供的信息! - bitops
@bitops 在iOS上完全相同。 - matt
@bitops 我不是说它完全像海报一样,只是说它并不糟糕。 - matt
@bitops,你使用的字体很糟糕,你需要一个有一定厚度的字体。 - matt
你找到解决方案了吗?我也遇到了同样的问题! - Mars
显示剩余4条评论

2
您可以使用库DrawingLabel的帮助,而不需要任何CoreGraphics代码。
DrawingStroke *blackStroke = [DrawingStroke new];
blackStroke.strokeWidth = 3.0;
blackStroke.strokeColor = [UIColor blackColor];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接