¿Cómo obtendré un CGRect
de un NSRange
para texto entregado con texto central?Texto principal - Obtener coordenadas de píxeles de NSRange
Estoy utilizando Core Text con un NSAttributedString
.
¿Cómo obtendré un CGRect
de un NSRange
para texto entregado con texto central?Texto principal - Obtener coordenadas de píxeles de NSRange
Estoy utilizando Core Text con un NSAttributedString
.
Es un dolor absoluto, pero se puede hacer.
que necesita para obtener todas las líneas en el marco usando CTFrameGetLines()
, comprobar si su rango de personaje está en el rango que está buscando usando CTLineGetStringRange()
, utilice CTLineGetTypographicBounds()
para encontrar lo grande que la propia línea haría que como, y el uso CTLineGetOffsetForStringIndex()
para determinar la posición real del carácter de inicio/final del rango (si la línea es solo un subintervalo del rango deseado).
Combinando todo esto y sumando compensaciones y alturas, puede obtener lo que desea. Tenga en cuenta que CTLineGetImageBounds()
no funciona sin un contexto de gráficos (y, por lo que veo, es bastante caro de todos modos) y no es necesario para resolver este problema.
Primero determine la (s) línea (s) en que se encuentra el rango que le interesa. Luego, llame al CTLineGetOffsetForStringIndex()
para obtener un desplazamiento de una posición de cadena específica desde el inicio de la línea. Junto con CTLineGetImageBounds()
, debería ser posible calcular una posición CGPoint
del primer y último caracteres en su rango.
¡Una respuesta detallada, muchas gracias! Siempre es un dolor encontrar todas las funciones que se requieren para cosas como esta. :) – Joshua
@Joshua ¿puedes compartir tu código cuando implementes esta respuesta? Creo que tengo un problema y no puedo resolverlo hasta 3 semanas, ayúdame, por favor ... –
@Risma En realidad, nunca pude implementar esto, pero todo lo que necesitas es la respuesta de Sean. – Joshua