2017-07-09 1 views
3

Si je comprends bien, une chaîne contient des glyphes et un glyphe peut être constitué de caractères individuels. Pour moi c'est un problème, car je voudrais changer la couleur de certains signes diacritiques dans une chaîne.Modification de la couleur de caractères individuels dans un glyphe

Disons que nous avons la chaîne suivante:

วาีม

Pour cette chaîne, je voudrais faire les consonnes une couleur différente car il est diacritique. I.e .: Je veux une couleur différente pour วาม et . De mes tests, il semble que je ne peux colorer que des glyphes individuels. Il semble que je ne puisse pas changer la couleur à un niveau de caractère (diacritique). Certains exemples de 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 

Ce qui précède rendu comme suit:

enter image description here

Comme on le voit le diacritique n'est pas rendu avec une couleur verte.

Est-ce que quelqu'un sait s'il y a un moyen d'atteindre le résultat que je veux?

Répondre

1

Une alternative consiste à placer deux étiquettes l'une sur l'autre; une contenant le texte avec les diacritiques dans la couleur que vous voulez pour les diacritiques; un sur le dessus avec le même texte mais sans les diacritiques, dans la couleur que vous voulez pour le texte.

Lors du rendu, les bits identiques du texte doivent s'annuler exactement, laissant le texte et les signes diacritiques dans les bonnes couleurs.

+1

En fait, ils ne s'annuleront pas correctement pour plusieurs raisons. Tout d'abord, le glyphe avec le signe diacritique est une entrée complètement différente dans la police de caractères. Il n'y a aucune raison de croire que les formes du personnage «de base» sont les mêmes et souvent elles ne le sont pas (par exemple, pour s'adapter à des grands signes diacritiques). Deuxièmement, même s'ils ont la même forme, ils sont des anti-alias. Cela signifie que les bords ont des pixels partiellement transparents. Quand ils sont dessinés l'un sur l'autre, les couleurs vont se mélanger et vous aurez des franges étranges. –

+0

Le problème de police est à propos, mais je ne suis pas sûr si le problème d'anti-aliasing est pertinent; Cela dépend du moment où cela se produit. –

+0

Alors que je pourrais obtenir un résultat approprié en utilisant votre approche suggérée, antialiasing est en effet un problème. En tant que tel, ce n'est pas 100% du résultat final que j'aimerais atteindre. –

2

Je doute que vous trouverez un bon moyen de le faire. Le glyphe pour าี dans la police est une chose complètement différente que le glyphe pour . Par exemple, dans la police Thonburi sur mon Mac, la première est glyphe 1507 et la dernière est glyphe 78. Chaque entrée de glyphe dans la police est une petite description complètement séparée de la façon de dessiner le glyphe. Pour le glyphe combiné, le diacritique n'est pas une chose distincte. Le système n'a aucun moyen de savoir quand il dessine le personnage de base et quand il dessine le diacritique. C'est juste en train de dessiner une chose. Donc, il ne peut pas appliquer différentes couleurs. Je ne suis pas du tout familier avec le thaïlandais, donc je ne fais que spéculer pour cette partie suivante, même si c'est certainement vrai pour certaines langues: je pense qu'il y a des glyphes pour combiner des séquences qui sont radicalement différentes de ce que vous obtiendriez juste superposer les composants les uns sur les autres. Donc, même en principe, il n'est pas clair qu'il existe une forme diacritique séparable visuellement par rapport au caractère de base.