Réglage de la couleur de fond / couleur de surbrillance pour une plage de chaîne donnée en utilisant Core Text

StackOverflow https://stackoverflow.com/questions/4498918

Question

J'ai un texte mis à l'aide d'Core Text dans mon application iPhone. J'utilise NSAttributedString pour définir certains styles dans le texte pour les plages données.

Je ne peux pas sembler trouver un attribut pour définir une couleur de fond / mettre en évidence, mais il semblerait qu'il soit possible. Je ne pouvais pas trouver une constante de nom d'attribut qui semblait pertinent et la documentation que les listes:

kCTCharacterShapeAttributeName
kCTFontAttributeName
kCTKernAttributeName
kCTLigatureAttributeName
kCTForegroundColorAttributeName
kCTForegroundColorFromContextAttributeName
kCTParagraphStyleAttributeName
kCTStrokeWidthAttributeName
kCTStrokeColorAttributeName
kCTSuperscriptAttributeName
kCTUnderlineColorAttributeName
kCTUnderlineStyleAttributeName
kCTVerticalFormsAttributeName
kCTGlyphInfoAttributeName
kCTRunDelegateAttributeName

Craig Hockenberry, développeur de Twitterrific a déclaré publiquement sur Twitter qu'il utilise Core Text pour rendre les tweets et Twitterrific a ce fond / highlight que je parle lorsque vous appuyez sur un lien.

text alt

Toute aide ou des pointeurs dans la bonne direction serait fantastique, merci.

Edit: Voici un lien au tweet Craig a affiché mentionner « texte de base, les chaînes attribuées et beaucoup de travail », et le suivi mentionné à l'aide mesures CTFrameSetter pour travailler si des touches se croisent avec des liens.

Était-ce utile?

La solution

En fin de compte, je devais utiliser les méthodes métriques de texte de base (obtenir la gamme, les limites, les origines de lignes, etc.) pour calculer le rectangle de délimitation du lien. Une fois que j'avais un rect pour chaque ligne le lien fractionnés, j'ai dessiné l'arrière-plan dans le contexte avant de redessiner le texte au-dessus.

On dirait un enfer de beaucoup de travail, mais cela fonctionne.

Autres conseils

Avec iOS 6, je pense que vous pouvez obtenir l'effet que vous recherchez avec: NSBackgroundColorAttributeName. Tels que:

[attributedString addAttribute:NSBackgroundColorAttributeName value:[UIColor yellowColor] range:selectedRange];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top