(В вашем связанном посте есть ссылка на пример проекта кода, который содержит полезный пример кода, но здесь я также опишу процесс для вас.)
Короче говоря, вы собираетесьнужно использовать Core Text, который является передовой платформой Apple для обработки текста на C, которая поддерживает всю сложную разметку текста в iOS и OS X.
Полный код будет несколько сложным, но ключевые методы вы собираетесьнужно посмотреть на:
CTFramesetterCreateWithAttributedString () - используйте это вместе с NSAttributedString, который вы получите из текста вашей метки - для создания framesetter
CTFramesetterCreateFrame () - используйте эточтобы получить CTFrameRef для вашего текста из указанного выше фрейм-сеттера.Вам нужно будет создать CGPathRef, используя границы меток, чтобы сделать это.
CTFrameGetLines (), CTFrameGetLineOrigins () - используйте их для получения CTLineRef, соответствующих строкам набора и координатам начала строки соответственно,затем используйте CTLineGetStringIndexForPosition (), чтобы найти индекс символа в месте прикосновения.
Затем вы можете использовать этот индекс символа (в ссылочной рамке строки), чтобы работать в обратном направлении и найти фактический символ / слово / и т. д. в вашем полномstring.
Не забывайте, что все осложняется парой проблем:
Если вы используете собственный рисунок UILabel, вам нужно будет позаботиться о том, чтобы он идеально соответствовал вашему набору текста.метрики, которые могут быть громоздкими, поскольку большинство объектов (например, CTFontRef) не являются бесплатными и соединены со своими аналогами UIKit.Реализация вашего собственного чертежа иногда может быть проще, что гарантирует соответствие метрики.
Core Text использует инвертированную систему координат по сравнению с обычной системой рисования iOS.Если вы получаете странные результаты, и особенно если вы делаете свой собственный рисунок, на это стоит взглянуть.
Не самая легкая задача в мире, но далеко не невозможная.Удачи!