Core Text-Get Pixel Coordinates from NSRange

Jak uzyskać CGRect z NSRange dla tekstu renderowanego z tekstem głównym?

Używam Core Text z NSAttributedString.

Author: Joshua, 2010-12-18

2 answers

To jest absolutny ból, ale można to zrobić.

Musisz pobrać wszystkie linie w ramce używając CTFrameGetLines(), sprawdzić, czy ich zakres znaków znajduje się w zakresie, którego szukasz używając CTLineGetStringRange(), użyć CTLineGetTypographicBounds(), aby dowiedzieć się, jak duża linia byłaby renderowana jako, i użyć CTLineGetOffsetForStringIndex(), aby określić rzeczywistą pozycję początkowego/końcowego znaku zakresu (jeśli linia jest tylko podzakresem pożądanego zakresu).

Łączenie tego wszystkiego i dodawanie offsetów i wysokości może dać ci to, co Ty chcę. Zauważ, że CTLineGetImageBounds() nie działa bez kontekstu graficznego (i z tego co wiem, i tak jest dość drogi) i nie jest konieczny do rozwiązania tego problemu.

 9
Author: Sean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-18 21:33:36

Najpierw określ linię(linie), w której znajduje się zakres, który Cię interesuje. Następnie wywołaj CTLineGetOffsetForStringIndex(), aby uzyskać przesunięcie określonej pozycji łańcucha od początku linii. Wraz z CTLineGetImageBounds() powinno być możliwe obliczenie pozycji CGPoint pierwszego i ostatniego znaku w Twoim zakresie.

 2
Author: Ole Begemann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-18 21:21:00