2017-07-09 9 views
3

據我所知,字符串包含字形,字形可能由單個字符組成。對我來說這是一個問題,因爲我想改變字符串中一些變音符的顏色。更改字形中單個字符的顏色

比方說,我們有以下字符串:

วาีม

該字符串我想提出的輔音不同的顏色,因爲它的讀音符號。 I.e .:我想要一個不同的顏色วาม

從我的測試中,我似乎只能夠對單個字形進行着色。看起來我無法改變字符(變音符)級別的顏色。一些示例代碼:

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

如可以看到的音調符號不與綠顏色呈現。

有誰知道是否有某種方法可以實現我想要的結果?

回答

1

另一種方法是將兩個標籤放在另一個上面;一個包含您想要的變音符號顏色的變音符號的文本;一個在它上面用相同的文本,但沒有的變音符號,在你想要的文本顏色。

渲染時,文本的相同位應該完全抵消,留給您正確顏色的文本和變音符號。

+1

實際上,由於幾個原因,它們不會正確取消。首先,帶有變音符號的字形與沒有字形的字體是完全不同的條目。沒有理由相信「基礎」角色的形狀是相同的,而且往往不是(例如,爲了適應高音符號)。其次,即使它們形狀相同,它們也是反別名。這意味着邊緣具有部分透明的像素。當彼此拉開時,顏色會混合,你會得到奇怪的邊緣。 –

+0

字體問題是apropos,但我不確定是否反鋸齒問題是相關的;這將取決於它發生的時間。 –

+0

雖然我可以使用建議的方法得到適當的結果,但抗鋸齒確實是一個問題。因此,這不是100%我想達到的最終結果。 –

2

我懷疑你會找到一個很好的方法來做到這一點。字體中的าี的字形與的字形完全不同。例如,在Mac上的Thonburi字體中,前者是字形1507,後者是字形78.字體中的每個字形條目都是如何繪製字形的完全獨立的小描述。對於組合字形,變音符號不是一個單獨的東西。系統無法知道何時繪製基本字符以及何時繪製變音符號。這只是繪製一件事。所以,它不能應用不同的顏色。我對泰語完全不熟悉,所以我只是推測下一部分,雖然它對於某些語言來說肯定是對的:我懷疑有些字形可以組合序列,這些序列與你所獲得的序列完全不同只是將組件重疊在一起。所以,即使在原則上,也不清楚與基本字符是否存在視覺上可分離的變音符形狀。