2017-07-09 2 views
3

Wie ich es verstehe, enthält eine Zeichenfolge Glyphen und eine Glyphe könnte aus einzelnen Zeichen bestehen. Für mich ist das ein Problem, da ich gerne die Farbe einiger Diakritika in einer Zeichenkette ändern möchte.Ändern der Farbe einzelner Zeichen in einem Glyphe

Lassen Sie uns sagen, dass wir die folgende Zeichenfolge haben:

วาีม

Für diese Zeichenfolge Ich mag würde die Konsonanten eine andere Farbe zu machen, wie es diakritischen ist. Ie .: Ich möchte eine andere Farbe für วาม und .

Aus meinen Tests scheint es, dass ich nur einzelne Glyphen färben kann. Es scheint, dass ich die Farbe nicht auf Charakterniveau (diakritisch) ändern kann. Einige Beispiel-Code:

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 

Das obige Beispiel würde wie folgt:

enter image description here

Wie die diakritischen sehen ist, ist nicht mit einer grünen Farbe wiedergegeben.

Weiß jemand, ob es eine Möglichkeit gibt, das gewünschte Ergebnis zu erzielen?

Antwort

1

Eine Alternative besteht darin, zwei Etiketten übereinander zu legen; eine enthält den Text mit den diakritischen Zeichen in der gewünschten Farbe für die diakritischen Zeichen; eine darüber mit demselben Text aber ohne die Diakritika, in der Farbe, die Sie für den Text wünschen.

Beim Rendern sollten die identischen Bits des Textes genau gelöscht werden, so dass Sie Text und diakritische Zeichen in den richtigen Farben erhalten.

+1

Eigentlich werden sie aus mehreren Gründen nicht richtig aufgehoben. Erstens ist die Glyphe mit dem Diakritischen ein ganz anderer Eintrag in der Schriftart als der ohne. Es gibt keinen Grund zu glauben, dass die Formen des "Basis" -Charakters gleich sind und oft nicht (z. B. um große Diakritika zu verwenden). Zweitens, selbst wenn sie die gleiche Form haben, sind sie Anti-Aliase. Das bedeutet, dass die Kanten teilweise transparente Pixel haben. Wenn sie übereinander gezogen werden, mischen sich die Farben und Sie werden seltsame Fransen bekommen. –

+0

Das Font-Problem ist apropos, aber ich bin mir nicht sicher, ob das Anti-Aliasing-Problem relevant ist; es würde davon abhängen, wann es in der Pipeline passiert. –

+0

Während ich mit dem vorgeschlagenen Ansatz ein angemessenes Ergebnis erzielen konnte, ist Antialiasing tatsächlich ein Problem. Als solches ist es nicht 100% das Endergebnis, das ich gerne erreichen würde. –

2

Ich bezweifle, dass Sie einen guten Weg finden, dies zu tun. Die Glyphe für าี in der Schriftart ist eine ganz andere Sache als die Glyphe für . In der Thonburi-Schriftart auf meinem Mac ist zum Beispiel die erste Schriftart Glyphe 1507 und die zweite ist Glyphe 78. Jeder Glypheneintrag in der Schriftart ist eine vollständig separate kleine Beschreibung, wie die Glyphe zu zeichnen ist. Für die kombinierte Glyphe ist das Diakritikum keine separate Sache. Das System hat keine Möglichkeit zu wissen, wann es das Basiszeichen zeichnet und wann es das Diakritikum zeichnet. Es zeichnet nur eine Sache. Es kann also keine unterschiedlichen Farben anwenden.

Ich bin völlig mit Thai nicht vertraut, also spekuliere ich nur für diesen nächsten Teil, obwohl es sicherlich für einige Sprachen gilt: Ich vermute, es gibt Glyphen für die Kombination von Sequenzen, die sich radikal von dem unterscheiden, was man bekommt nur überlagern die Komponenten übereinander. Also, auch im Prinzip ist es nicht klar, dass es eine visuell trennbare diakritische Form gegenüber dem Basiszeichen gibt.

Verwandte Themen