2010-10-10 19 views
9

È possibile disegnare rich text con Core Text, il problema consiste nel posizionare immagini che scorrono con il testo. (iOS SDK 4.1)Come disegnare immagini tra rich-text con CoreText? (iOS)

Sto provando a disegnare una specie di testo RTF. Problema: il progettista ha inserito molte icone nel testo. Così il testo quello che ho da trarre è qualcosa di simile:

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> sono immagini. (Questo non è un codice. Solo un'illustrazione.)

Posso disegnare tutto questo manualmente, ma è troppo difficile mantenere comportamenti di layout di testo complessi. Quindi sto trovando un modo per disegnare questo con Core Text.

risposta

9

Ho una soluzione.

La chiave per la creazione di contenuto non di testo è CTRunDelegate. Core Text non supporta il contenuto non di testo, quindi è necessario creare spazi vuoti per loro e disegnarli o posizionarli in un secondo momento.

Una parte di NSAttributedString attribuita con kCTRunDelegateAttributeName chiamerà callback registrato per determinare la larghezza di ciascun glifo. Questo ti permetterà di creare uno spazio vuoto per ogni oggetto non di testo.

Tuttavia, dopo aver disegnato il testo con Core Text, le informazioni di layout memorizzate con frame/line/run verranno invalidate. Quindi devi disegnare/posizionare il contenuto non di testo dopo il layout con corniciaio/tipografo, ma prima di disegnare.

Questo link si descrivono le funzionalità di base del CTRunDelegate:
How to use CTRunDelegate in iPad?


C'è un problema con processori Core Text. Originariamente, CTRunDelegate progettato per supportare larghezza variabile e allineamento verticale tramite CTRunDelegateCallbacks.getAscent e CTRunDelegateCallbacks.getDescent. Ma la funzione di allineamento verticale non funziona al momento. Questo potrebbe essere un bug.

ho descritto questo problema qui: Aligning multiple sized text vertical center instead of baseline with Core Text in iOS

Se si dispone di informazioni su questo problema, vedere la mia domanda al link.

3

È sufficiente impostare un delegato per un determinato CTRun e l'oggetto delegato è responsabile di far conoscere a Core Text quali sono lo spazio di ascesa CTRun, lo spazio di discesa e la larghezza.

Quando il Core Text "raggiunge" un CTRun che ha un CTRunDelegate chiede al delegato - quanta larghezza dovrei lasciare per questa porzione di dati, quanto dovrebbe essere alta? In questo modo costruisci un buco nel testo, quindi disegni la tua immagine proprio in quel punto.

enter image description here

Qui è un blog su Core Text.It ha la risposta per voi.

How To Create a Simple Magazine App with Core Text

Problemi correlati