2010-07-23 7 views
2

Je développe une application dans laquelle j'utilise Core Text pour la mise en page. J'ai utilisé CTFrameSetter pour dessiner le texte. J'ai inséré un caractère '\ ufffc' dans mon texte. Maintenant, ce que je veux, c'est déterminer la position de ce caractère vide, c'est-à-dire ses coordonnées x, y. Je n'ai pas pu trouver de fonction pour déterminer la position d'un personnage spécifique.Déterminer le CTLine contenant le caractère spécifique

J'ai essayé d'utiliser CTLineGetOffsetForStringIndex(CTLineRef line, CFIndex charIndex, CGFloat* secondaryOffset); pour trouver la position, mais je ne pouvais pas comprendre complètement le fonctionnement de cette méthode.

Quelqu'un peut-il me fournir des indications sur ce problème?

+0

'CTLineGetOffsetForStringIndex' est une fonction, pas une méthode. –

Répondre

0

vous pouvez boucler toutes les CTLines de l'actuel CTFrameRef, et pour chaque ctline, obtenir le CTRun et vérifier si ce CTRun est le vôtre. code simple

NSArray *lines = (NSArray*)CTFrameGetLines(workFrame); 
NSInteger count = [lines count]; 
CGPoint *origins = (CGPoint*)malloc(count * sizeof(CGPoint)); 
CTFrameGetLineOrigins(workFrame, CFRangeMake(0, count), origins); 

for (int i = 0; i < lines.count; i++) { 
     CTLineRef line = (CTLineRef)[lines objectAtIndex:i]; 
     CFRange cfRange = CTLineGetStringRange(line);//the string-range 

     NSArray * runArray = (NSArray *)CTLineGetGlyphRuns(line); 

     int runIndex = 0; 
     for (id runObj in runArray) { 
      CTRunRef run = (CTRunRef)runObj;   
      CFRange runRange = CTRunGetStringRange(run); 
      CGFloat xOffset = CTLineGetOffsetForStringIndex(line, runRange.location + runRange.length, NULL); 
      //checks if the crrun's text is your space 
     } 
    } 
+0

Comment vérifiez-vous le contenu de 'CTRun'? – testing

Questions connexes