Я пытаюсь настроить CTFrame
, который точно соответствует текстовому формату UITextView
в iPad.
Прежде всего, я преобразовал текст UITextView
в атрибутированную строку. Затем я устанавливаю ширину и высоту окна рисования, в котором Core Text будет рисовать текст.
Мне удалось нарисовать текст с использованием Core Text, но UITextView
и Core Text показывают несколько разные результаты, хотя я использовал один и тот же шрифт и размер.
В частности, когда я использовал [UIFont systemFontOfSize:21]
, каждое пространство в UITextView
имеет еще один пиксель, чем результат Core Text.
Это хорошо для короткого предложения или слова, но если UITextView
и Core Text имеют несколько строк, их результат становится совсем другим. Например, UITextView
выполняет перенос слов для одного слова в конце строки, в то время как Core Text сохраняет это слово в одной строке. Если вы видите прикрепленное изображение, стартовые позиции последнего слова "абзац" уже очень разные (8-пиксельный зазор из-за 8 пробелов).
Более плохо, если я использую разные шрифты, такие как пользовательский шрифт, добавленный в мой проект, каждый символ в UITextView
имеет еще 1 пиксель.
Я использую Core Text, чтобы найти положение пикселя текущего курсора в UITextView
, поэтому оба они должны идеально соответствовать друг другу, содержащим одинаковое количество символов и слов в каждой строке.
Вопрос: Есть ли способ создать объект Core Text, который идеально соответствует текстовому формату UITextView?
Спасибо!
Вот код, как я устанавливаю атрибутированную строку. (Я просто следовал руководству Core Text.)
CTFontRef font = CTFontCreateWithName((CFStringRef) [UIFont systemFontOfSize:21.0].fontName, 21.0, NULL);
CFMutableAttributedStringRef attrString2 = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0);
CFAttributedStringReplaceString (attrString2, CFRangeMake(0, 0), (CFStringRef) string);
CFAttributedStringSetAttribute(attrString2, CFRangeMake(0, [string length]),kCTFontAttributeName, font);
-
-
Вот изображение.