긴 문자열을 페이지에 배치하는 경우 CTFramesetterCreateFrame
을 사용하여 CTFrameRef
을 만들고 다음에 생성 할 문자열의 시작 색인을 앞으로 이동하십시오. CTFrameRef
. 이것은 시작 인덱스가 앞으로 이동하기 때문에 쉽고 Core Text API는 이러한 종류의 레이아웃을 기본적으로 지원합니다.코어 텍스트를 사용하여 텍스트를 거꾸로 배치하는 방법은 무엇입니까?
이제는 내가 원하는 상황에 갇혀있다. 이전 페이지로 돌아 가기.
예를 들어 긴 문자열의 길이가 1000이고 현재 현재 페이지 (또는 CTFrameRef
)의 시작 인덱스가 500이고 이전 페이지로 돌리고 싶습니다. 어떤 인덱스를 시작할 지 어떻게 알 수 있습니까? 각 페이지에 대한 모든 인덱스를 캐싱 할 수 없거나 문자열 시작 부분부터 계산할 수 없으므로 문자열이 메모리에 맞지 않는 매우 길어질 수 있습니다 (블록별로 파일 블록에서 문자열을 읽어야 함) . CT*
API를 스캔했지만 텍스트를 거꾸로 배치 할 수있는 API는 없습니다.
이것에 대한 아이디어가 있습니까?
감사합니다. @mohsenr, 제 질문은 마침내 대답을 얻었습니다. 나는 이미 첫 번째 제안과 99 % 동일한 방법을 시도하고 있었다. 이전 페이지의 문자열 범위를 1로 추정하는 것이 아닙니다.현재 페이지의 길이의 5 배/2 배로, 페이지에 1000 개의 'a'가 포함되어 있으면 페이지에 반복적으로 한 개의 문자 만 포함될 것이라고 가정했습니다. CTFrame을 만들고 4, 5 번에서 제안한 것을하십시오. – neevek
두 번째 제안은 첫 번째 제안보다 좋지 않습니다. 텍스트 크기 나 글꼴이 변경되면 캐시가 깨지고 ** 인덱스를 다시 작성하는 데 비용이 많이 듭니다 **. * 다음 페이지를 돌릴 때 * n * 페이지에 대한 표시를 캐시 할 수 있지만 캐시에 항상 의존 할 수는 없습니다. 어쨌든, 당신은 안드로이드의'Paint.breakText()'의 아이폰 OS에 상응하는 것이 없다고 대답했다. – neevek