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
.
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.
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.
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