更改字形中单个字符的颜色

时间:2017-07-09 07:35:53

标签: ios swift nsattributedstring

据我了解,字符串包含字形,字形可能包含单个字符。对我来说这是一个问题,因为我想改变字符串中一些变音符号的颜色。

我们说我们有以下字符串:

วาีม

对于这个字符串,我想使辅音成为不同的颜色,因为它的变音符号。即:我想为วาม添加不同的颜色。

从我的测试看来,我似乎只能为单个字形着色。我似乎无法改变角色(变音符号)的颜色。一些示例代码:

let text = NSMutableAttributedString(string: "วาีม")
text.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue, range: NSMakeRange(0, 1))
text.addAttribute(NSForegroundColorAttributeName, value: UIColor.red, range: NSMakeRange(1, 1))
text.addAttribute(NSForegroundColorAttributeName, value: UIColor.green, range: NSMakeRange(2, 1))
text.addAttribute(NSForegroundColorAttributeName, value: UIColor.orange, range: NSMakeRange(3, 1))
label.attributedText = text

以上将呈现如下:

enter image description here

可以看出,变音符号没有呈现绿色。

有谁知道是否有某种方法可以达到我想要的效果?

2 个答案:

答案 0 :(得分:2)

我怀疑你会找到一个很好的方法来做到这一点。字体中าี的字形与的字形完全不同。例如,在Mac上的Thonburi字体中,前者是字形1507,后者是字形78.字体中的每个字形条目都是如何绘制字形的完全独立的小描述。对于组合字形,变音符号不是一个单独的东西。系统无法知道何时绘制基本字符以及何时绘制变音符号。它只是画了一件事。因此,它不能应用不同的颜色。

我对泰语完全不熟悉,所以我只是推测下一部分,虽然对于某些语言来说确实如此:我怀疑是否有用于组合序列的字形,这些字形与你所获得的完全不同将组成部分重叠在一起。因此,即使在原则上,也不清楚视觉上可分离的变音形状与基本特征。

答案 1 :(得分:1)

另一种方法是将两个标签放在一起;一个包含文本的变音符号,你想要变音符号;一个在它上面,文本相同,但没有变音符号,以你想要的文字颜色。

渲染时,文本的相同位应该完全抵消,留下正确颜色的文本和变音符号。