Для певного NSRange
я хотів би знайти a CGRect
в, UILabel
який відповідає гліфам цього NSRange
. Наприклад, я хотів би знайти те, CGRect
що містить слово "собака" у реченні "Швидка коричнева лисиця стрибає над ледачою собакою".
Хитрість полягає в тому, що у UILabel
є кілька рядків, а текст справді є attributedText
, тож знайти точне положення рядка трохи важко.
Метод, який я хотів би написати у своєму UILabel
підкласі, виглядав би приблизно так:
- (CGRect)rectForSubstringWithRange:(NSRange)range;
Деталі для тих, хто цікавиться:
Моя мета - це можливість створити новий UILabel з точним виглядом і положенням UILabel, який я зможу потім анімувати. Решта я зрозумів, але саме цей крок зараз мене стримує.
Що я зробив, щоб вирішити проблему дотепер:
- Я сподівався , що з прошивкою 7, НЕ було б трохи тексту Kit , який дозволить вирішити цю проблему, але майже кожен приклад , який я бачив з Text Kit фокусується на
UITextView
іUITextField
, а неUILabel
. - Я бачив тут ще одне запитання щодо переповнення стека, яке обіцяє вирішити проблему, але прийнята відповідь старша за два роки, і код погано працює з атрибутивним текстом.
Б'юся об заклад, що правильна відповідь на це передбачає одне з наступного:
- Використання стандартного методу Text Kit для вирішення цієї проблеми в одному рядку коду. Б'юся об заклад, що це буде включати
NSLayoutManager
іtextContainerForGlyphAtIndex:effectiveRange
- Написання складного методу, який розбиває UILabel на рядки і знаходить прямокутник гліфа всередині рядка, ймовірно, використовуючи методи основного тексту. На сьогоднішній день найкращим чином я розбираю чудовий TTTAttributedLabel @ mattt , який має метод, який знаходить гліф у певній точці - якщо я інвертую це, і знаходжу точку для гліфа, це може спрацювати.
Оновлення: Ось суть github із трьома речами, які я намагався вирішити цю проблему: https://gist.github.com/bryanjclark/7036101