나는 응용 프로그램의 텍스트 편집기로 작업 중입니다. UITextView를 사용하고 있습니다.큰 NSAttributedString을 사용하는 UItextView의 스크롤링 성능 문제
텍스트보기를로드하려면 샘플 코드를 참조하십시오.
// Read text from file (around 300k - 400k words)
NSError *error = nil;
NSString *contentOfFile = [[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"17254" ofType:@"txt"]
encoding:NSUTF8StringEncoding
error:&error];
// Attributes for text
UIFont *font = [UIFont fontWithName:@"Baskerville" size:36.0f];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.alignment = NSTextAlignmentJustified;
NSDictionary *attributes = [[NSDictionary alloc] initWithObjectsAndKeys:font, NSFontAttributeName,
[UIColor blackColor], NSForegroundColorAttributeName,
paragraphStyle, NSParagraphStyleAttributeName, nil];
// Create attributed string
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:contentOfFile attributes:attributes];
// Assign to text view
self.textView.attributedText = attributedString;
텍스트의 크기는 약 400k 단어입니다.
다음과 같은 문제가 있습니다.
메모리 스크롤로 인해 텍스트가 너무 느리게 스크롤되거나 앱이 다운되는 경우가 있습니다. iOS는 텍스트 뷰를 스크롤 할 때 iOS가 렌더링 된 텍스트 이미지를 메모리에 저장하고 있다고 생각하지만, 위로 스크롤하면 메모리가 해제됩니다.
"모두 선택"을 탭하면 텍스트를 선택하는 데 너무 많은 시간이 걸리고 텍스트를 선택한 후에 스크롤이 좋지 않게되고 메모리가 증가하여 메모리 문제로 인해 응용 프로그램이 충돌하는 경우가 있습니다. 나는 iOS가 완전한 텍스트의 이미지 (마치 사용자가 볼 수있는 것처럼)를 메모리에 생성 한 다음 전체 텍스트를 선택하고 선택이 완료 될 때까지 이미지를 유지한다고 생각한다. 선택이 끝나면 앱에 의해 유지 된 메모리가 떨어집니다.
큰 텍스트를 표시하는 다른 방법은 여러 textviews를 사용하고 단지 jQuery과 같은 눈에 보이는 텍스트 뷰의 텍스트를 지정하는 것입니다,하지만 난 각에 필요한 textviews의 수를 재 계산해야으로이 복잡성을 증가 UItextView의 layoutManager에 대한 textChanged 대리자 호출입니다.
어떤 몸이라도 UITextView에서 큰 속성의 텍스트를 더 나은 성능으로 표시하는 방법을 알고 있습니다.
어떤 것도 iPages 앱이 작동하는 방식입니다. 영역이 보이는 범위에있을 때 텍스트가 표시되기 때문입니다.
페이지는 완전한 사용자 정의보기를 사용합니다 ... 텍스트를 표시하는 경우에는 'UIWebView'를 사용할 수 있습니다 ... 서식을 지정하기 위해 일부 HTML 태그에 텍스트를 래핑 한 다음 그 모양으로 표시합니다. – jjv360
편집자. 사용자는 글꼴, 색 및 정렬을 편집 할 수 있습니다. 페이지 나누기 및 기타 옵션을 추가 할 수 있습니다. –