2010-10-10 11 views
9

Je peux dessiner du texte enrichi avec Core Text, le problème est de placer des images qui coulent avec le texte. (iOS SDK 4.1)Comment dessiner des images en texte enrichi avec CoreText? (iOS)

Je suis en train d'essayer de dessiner une sorte de texte enrichi. Le problème est le concepteur placé beaucoup d'icônes parmi le texte. Donc, le texte ce que je dois dessiner est quelque chose comme ceci:

Here is a word <an icon image>, and another words. 
The image(<another icon>) should be placed like a glyph. 
It's part of text, not an example. 

<icon> sont des images. (Ce n'est pas un code, juste une illustration.)

Je peux dessiner ceci en les disposant manuellement, mais il est trop difficile de garder des comportements de mise en page complexes. Donc, je trouve un moyen de dessiner cela avec Core Text.

Répondre

9

J'ai obtenu une solution.

La clé de la mise en page de contenu non textuel est CTRunDelegate. Core Text ne prend pas en charge le contenu non textuel, vous devez donc créer des espaces vides pour eux et les dessiner ou les placer ultérieurement.

Une partie de NSAttributedString attribuée à kCTRunDelegateAttributeName appelle un rappel enregistré pour déterminer la largeur de chaque glyphe. Cela vous permettra de créer un espace vide pour chaque objet non-texte. Cependant, après avoir dessiné le texte avec Core Text, les informations de mise en page stockées avec image/ligne/exécution seront invalidées. Donc, vous devez dessiner/placer des contenus non-texte après la mise en page avec framesetter/typographes, mais avant de dessiner.

Ce lien décrit l'utilisation de base de CTRunDelegate:
How to use CTRunDelegate in iPad?


Il y a un problème avec le texte de base. À l'origine, CTRunDelegate conçu pour prendre en charge la largeur variable et l'alignement vertical via CTRunDelegateCallbacks.getAscent et CTRunDelegateCallbacks.getDescent. Mais la fonction d'alignement vertical ne fonctionne pas actuellement. Cela pourrait être un bug.

Je décrit ce problème ici: Aligning multiple sized text vertical center instead of baseline with Core Text in iOS

Si vous avez des informations sur ce problème, s'il vous plaît voir ma question sur le lien.

3

Vous définissez simplement un délégué pour un CTRun donné et l'objet délégué est responsable de faire savoir au Core Text quel est l'espace de montée CTRun, l'espace de descente et la largeur.

Lorsque le texte principal "atteint" un CTRun qui a un CTRunDelegate il demande au délégué - combien de largeur dois-je laisser pour ce morceau de données, quelle devrait être sa hauteur? De cette façon, vous construisez un trou dans le texte - alors vous dessinez votre image à cet endroit précis.

enter image description here

est ici un blog sur Core Text.It a la réponse pour vous.

How To Create a Simple Magazine App with Core Text

Questions connexes