Причиной наибольшего успеха при прокрутке является то, что каждый раз при прокрутке прокрутки он перерисовывает представление и, соответственно, перекрашивает весь ваш документ. Поскольку во время одной операции прокрутки вид прокрутки прокручивается на несколько пикселей, просто прокрутка n
пикселей вверх или вниз приведет к изменению цвета всего документа n
раз!
Я предлагаю убедиться, что вы только раскрашиваете текст, который отображается на экране. Последнее, что вы когда-либо хотите сделать, - это добавление атрибутов к символам, которые были прокручены вне поля зрения, поскольку в этот момент циклы по существу теряются.
Вы можете получить диапазон видимого текста из текстового представления:
- (NSRange)visibleRange
{
NSRect visibleRect = [textView visibleRect];
NSRange glyphVisibleRange = [[textView layoutManager] glyphRangeForBoundingRect:visibleRect inTextContainer:[textView textContainer]];
NSRange charVisibleRange = [[textView layoutManager] characterRangeForGlyphRange:glyphVisibleRange actualGlyphRange:nil];
return charVisibleRange;
}
Итак, когда вы делаете раскрашивание, раскрашивайте только те глифы, которые попадают в этот диапазон. Это должно улучшить производительность прокрутки на несколько порядков.