2010-12-18 5 views

답변

9

절대적인 고통이지만 할 수 있습니다.

당신은 자신의 문자 범위는 CTLineGetStringRange()을 사용하여 찾고있는 범위에있는 경우, 라인 자체로 렌더링 얼마나 큰 찾을 CTLineGetTypographicBounds()를 사용하여 확인 CTFrameGetLines()를 사용하여 프레임의 모든 라인을 얻을 필요, 사용 CTLineGetOffsetForStringIndex()을 사용하여 범위의 시작/끝 문자의 실제 위치를 결정하십시오 (선이 원하는 범위의 일부 범위에 불과한 경우).

이 모든 것을 결합하고 오프셋과 높이를 합하면 원하는 것을 얻을 수 있습니다. CTLineGetImageBounds()은 그래픽 컨텍스트가 없으면 작동하지 않으며 (어쨌든 꽤 비싸다)이 문제를 해결할 필요가 없다는 점에 유의하십시오.

+0

상세한 답변, 고마워요! 이와 같은 일에 필요한 모든 기능을 찾는 것은 항상 고통 스럽습니다. :) – Joshua

+1

@Joshua는이 답변을 구현할 때 ur 코드를 공유 할 수 있습니까 ?? 나는 약간 문제가 있고 3 주까지 그것을 해결할 수 없다고 생각한다. 도와주세요, 제발 ... –

+0

@Risma 저는 이것을 실행하는 것에 결코 휩쓸 리지 않았지만 필요한 모든 것은 Sean의 대답에 있습니다. – Joshua

2

먼저 거짓말에 관심이있는 범위가있는 행을 결정하십시오. 그런 다음 CTLineGetOffsetForStringIndex()으로 전화하여 라인의 시작 부분에서 특정 문자열 위치의 오프셋을 가져옵니다. CTLineGetImageBounds()과 함께 범위 내 첫 문자와 마지막 문자의 위치는 CGPoint이어야합니다.

관련 문제