Определить CTLine, связывающий специфический характер - PullRequest
2 голосов
/ 23 июля 2010

Я разрабатываю приложение, в котором я использую основной текст для макета. Я использовал CTFrameSetter для рисования текста. Я вставил пустой символ '\ ufffc' в мой текст. Теперь я хочу определить положение этого пустого символа, то есть его координаты x, y. Мне не удалось найти какую-либо функцию для определения положения какого-либо конкретного символа.

Я пытался использовать CTLineGetOffsetForStringIndex( CTLineRef line, CFIndex charIndex, CGFloat* secondaryOffset ); для нахождения позиции, но я не мог полностью понять работу этого метода.

Кто-нибудь может дать мне несколько советов по этому вопросу?

1 Ответ

0 голосов
/ 22 августа 2012

вы можете зациклить все CTLines текущего CTFrameRef, и для каждой ctline получить CTRun и проверить, является ли этот CTRun вашим.простой код

 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
        }
   }
...