Многослойный NSTextView делает много дополнительного рисования с drawsBackground false - PullRequest
0 голосов
/ 19 января 2019

Я сталкиваюсь с проблемой, когда мой NSTextView выполняет колоссальный объем работ по рисованию во время простоя. Чертеж запускается мигающим курсором. Это нормальное поведение, но объем выполняемой работы по рисованию чрезмерен. Если я переопределю shouldDrawInsertionPoint, чтобы вернуть false, работа полностью остановится.

Насколько я могу судить, частота рисования не увеличилась, просто объем работы, необходимый для этого. Работа, выполняемая ЦП , не масштабируется с размером фрейма NSTextView, но с количеством текста в NSTextStorage. И по трассировке Instruments я вижу, что в основном это NSLayoutManager, выполняющий работу по макетированию и отрисовке текста. Это действительно удивило меня - оно, похоже, рисует текст, который не виден.

Я сузил условия до NSTextView с drawsBackground, установленным в false, и wantsLayer, установленным в true. Если я изменю какое-либо из этих свойств, процессор, необходимый для рисования мигающего курсора, уходит далеко вниз. Я могу обойти это, просто нарисовав фон, но я хотел бы лучше понять это.

Кто-нибудь знает, что случилось?

...