У меня есть класс, работа которого заключается в разборе текста на несколько страниц.
Я использую sizeWithFont: метод, чтобы определить, когда одна страница заканчивается, а другая начинается.
Но, к сожалению, поскольку объем текста, который необходимо проанализировать, довольно велик, вся операция должна выполняться в фоновом потоке (для завершения требуется несколько секунд). И поэтому иногда я получаю визуальные артефакты на своем интерфейсе (UIKit не является потокобезопасным, но я вызываю его из нескольких потоков одновременно), от которого я бы хотел избавиться.
Мне нужно избавиться от использования sizeWithFont: в фоновом потоке. Но, похоже, альтернативы этому методу просто не существует. Единственный способ узнать ширину текста с помощью Core Graphics - это использовать метод, указанный в документации Apple:
- Вызовите функцию CGContextGetTextPosition, чтобы получить текущую текстовую позицию.
- Установите режим рисования текста на kCGTextInvisible, используя функцию CGContextSetTextDrawingMode.
- Нарисуйте текст, вызвав функцию CGContextShowText, чтобы нарисовать текст в текущей позиции текста.
- Определите окончательную позицию текста, вызвав функцию CGContextGetTextPosition.
- Вычтите начальную позицию из конечной позиции, чтобы определить ширину текста.
Но я действительно обеспокоен тем, что это приведет к огромной потере производительности.
Кто-нибудь знает другой способ узнать ширину текста?