일부 텍스트 분석을 수행하고 있으며 성가신 성능이 뛰어나서 최적화 방법을 찾지 못하는 것 같습니다. UITextView의 텍스트로 시작하여 텍스트를 ".?!"의 문자로 분할하여 문장의 배열로 나눕니다.UITextView에서 문장 주위에 CGPath를 작성하는 것은 -positionFromPosition에서 매우 느립니다.
그런 다음 각 문장을 반복하여 문장을 단어 배열로 분할하고 문장의 첫 번째 단어와 마지막 단어를 가져옵니다. 문장 텍스트의 NSRange를 사용하여 UITextView의 텍스트에서 첫 번째와 마지막 단어의 범위를 찾습니다.
다음 부분은 성능 저하가 발생한 부분입니다. 이것은 내가 처음이자 마지막 단어의 경계 CGRect을 찾는 방법입니다 :
// the from range is increased each iteration
// so i'm not searching the entirety of the text each pass
NSRange range = [textView.text rangeOfString:firstWord options:kNilOptions range:fromRange];
UITextPosition *beginning = textView.beginningOfDocument;
UITextPosition *start = [textView positionFromPosition:beginning offset:range.location];
UITextPosition *end = [textView positionFromPosition:start offset:range.length];
UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];
firstRect = [textView firstRectForRange:textRange];
내가 한 번 첫 번째 단어를 한 번 마지막 단어를 두 번을이
을 수행합니다. 이 방법은 작은 텍스트에서는 효과가 있지만 5 개 이상의 단락에 접근하면 UITextView -positionFromPosition : 작업이 492ms의 시간을 소비하여 UI와 CPU를 100 %로 고정시킵니다.
CGACect를 작성하여 문장을 강조 할 수 있도록해야합니다. 전체가 작동하고 정말 멋져 보이지만, 그 직사각형이 발견되면서 나를 죽이고 있습니다. 나는 UITextView를 사용하는 것에 상당히 익숙하다. 그래서 만약 내가 할 수있는 일이 있다면, 범위를 가지고 내 검색을 최적화하거나 어떻게 든 백그라운드 스레드에 내 작업을 배치하면, 나는 많은 의무를지게 될 것이다.
나는 이것이 대답이 아니라는 것을 알고있다. 그러나 나는 당신이 그 직사각형을 필요로하는지 궁금하다. 텍스트 범위를 강조 표시하는 경우, UITextView에서 iOS 6의 새로운 NSAttributedString 메소드를 사용하여 주어진 범위를 강조 표시 할 수 있습니다. – jbrennan
답변으로 게시해야합니다! 디버깅 및 연구 시간을 절약 해 줬습니다. UITextViews가 NSAttributedStrings를 사용한다는 것을 완전히 잊었습니다! 100 LoC에서 15까지. 딸꾹질없이 GCD를 사용할 수 있습니다. Ahh 내 인생은 훨씬 낫다. – rnystrom