2015-12-10 3 views
1

Как можно улучшить производительность UITextView при использовании атрибутированных строк? Следующие результаты примеры кода в совершенно неприемлемых производительности на IPad 3.Производительность прокрутки UITextView для больших атрибутивных строк

NSMutableParagraphStyle *pStyle = [[NSMutableParagraphStyle alloc] init]; 
pStyle.lineSpacing = 14.0; 
pStyle.lineHeightMultiple = 20; 
pStyle.maximumLineHeight = 20.0; 
pStyle.minimumLineHeight = 20.0; 
UIFont *font = [UIFont systemFontOfSize:20.0]; 
NSDictionary *attributes = @{ NSFontAttributeName : font, NSParagraphStyleAttributeName : pStyle}; 

NSMutableAttributedString *newline = [[NSMutableAttributedString alloc] initWithString:@"\n\n"]; 
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"" attributes:@{}]; 

for (int paragraph=0; paragraph<300; paragraph++){ 
    for (int word=0; word<100; word++){ 
     [string appendAttributedString:[[NSAttributedString alloc] initWithString:@"text!"]]; 
    } 
    [string appendAttributedString:newline]; 
} 

[string setAttributes:attributes range:NSMakeRange(0, string.length)]; 

self.textView.attributedText = string; 

Я должен упомянуть, что я открыт для использования Text Kit, но я не знаю, с чего начать, чтобы гарантировать, что производительность в конечном счете, в порядке. Кроме того, вот что происходит в профайлере при прокрутке.

Profiler

ответ

1

Две вещи помогают здесь.

  1. Во-первых, мне нужен только набор lineSpacing. Установка любого из параметров другого абзаца приводит к медленной прокрутке.

  2. Второй должен был позвонить [self.textView.layoutManager ensureLayoutForCharacterRange:NSMakeRange(0, self.textView.attributedText.length)]; в viewDidAppear:. В противном случае при первом прокрутке документа он отрывается.