Jak zlokalizować CGRect dla podciągu tekstu w UILabel?

Dla danegoNSRange, Chciałbym znaleźćCGRect wUILabel to odpowiada glifom tegoNSRange. Na przykład chciałbym znaleźćCGRect który zawiera słowo „pies” w zdaniu „Szybki brązowy lis przeskakuje nad leniwym psem”.

Sztuczka polega na tymUILabel ma wiele linii, a tekst jest naprawdęattributedText, więc trudno jest znaleźć dokładne położenie ciągu.

Metoda, którą chciałbym napisać na moimUILabel podklasa wyglądałaby mniej więcej tak:

 - (CGRect)rectForSubstringWithRange:(NSRange)range;

Szczegóły dla zainteresowanych:

Moim celem jest być w staniestwórz nowy UILabel o dokładnym wyglądzie i pozycji UILabel, który mogę następnie animować. Resztę wymyśliłem, ale to właśnie ten krok powstrzymuje mnie w tej chwili.

Co zrobiłem, aby spróbować rozwiązać problem do tej pory:

Miałem nadzieję, że w systemie iOS 7 będzie trochę tekstu, który rozwiąże ten problem, ale większość każdego przykładu, który widziałem w Text Kit, skupia się naUITextView iUITextFieldraczej niżUILabel.Widziałem tutaj kolejne pytanie dotyczące Stack Overflow, które obiecuje rozwiązać problem, ale zaakceptowana odpowiedź ma ponad dwa lata, a kod nie działa dobrze z tekstem przypisanym.

Założę się, że właściwa odpowiedź na to wymaga jednego z następujących:

Używanie standardowej metody Text Kit do rozwiązania tego problemu w jednym wierszu kodu. Założę się, że to pociągnie za sobąNSLayoutManager itextContainerForGlyphAtIndex:effectiveRangePisanie złożonej metody, która dzieli UILabel na linie i znajduje poprawkę glifu w linii, prawdopodobnie przy użyciu metod Core Text. Moim najlepszym rozwiązaniem jest rozbicie@ mattt's doskonałyTTTAttributedLabel, która ma metodę, która znajduje glif w punkcie - jeśli to odwrócę i znajdę punkt dla glifu, który może działać.

Aktualizacja: Oto github gist z trzema rzeczami, które próbowałem rozwiązać, aby rozwiązać ten problem:https://gist.github.com/bryanjclark/7036101

questionAnswers(9)

yourAnswerToTheQuestion