Цель C - Основной текст и рисование линий? - PullRequest
3 голосов
/ 07 августа 2011

Я использую основной текст для редактора форматированного текста. Я разрешаю пользователям изменять выравнивание текста.

Итак, скажем, пользователь вводит 3 слова, а затем выбирает правильную кнопку выравнивания. После нажатия кнопки я создаю CTParagraphStyle с textAlignment, установленным вправо, и я установил свой attribuString для этого диапазона, чтобы он содержал этот стиль абзаца.

Проблема в том, что когда пользователь печатает, а CoreText начинает рисовать на следующей строке, выравнивание автоматически возвращается к левому выравниванию.

Какое правильное решение расширить этот стиль абзаца до остальных строк в текущем абзаце (когда пользователь печатает и перерисовывает основной текст)?

NSArray *lines = (NSArray*)CTFrameGetLines(_frame);
NSInteger count = [lines count];

CGPoint *origins = (CGPoint*)malloc(count * sizeof(CGPoint));
CTFrameGetLineOrigins(_frame, CFRangeMake(0, count), origins);    
CGContextRef ctx = UIGraphicsGetCurrentContext();
for (int i = 0; i < count; i++) {
    CTLineRef line = (CTLineRef)CFArrayGetValueAtIndex((CFArrayRef)lines, i);
    CGContextSetTextPosition(ctx, frameRect.origin.x + origins[i].x, frameRect.origin.y + origins[i].y);
    CTLineDraw(line, ctx);
}

1 Ответ

2 голосов
/ 07 августа 2011

Вам необходимо отслеживать текущие «атрибуты вставки», то есть атрибуты, которые должны применяться к любому тексту, который вводит пользователь. То же самое касается жирного, курсива и так далее. По сути, вам нужно посмотреть на атрибуты до текущей позиции курсора и применить эти атрибуты к новому тексту.

...