У меня есть пользовательский интерфейс, в котором содержимое View NSCollectionViewItem
рисуется программно через CALayers.Я использую CAConstraintLayoutManager
, чтобы сохранить согласованность расположения подслоев при изменении размера, но при этом у меня очень низкая производительность.Кажется, что изменение размера окна, которое вызывает изменение размера двух CATextLayer
с, чтобы они соответствовали ширине корневого слоя, и изменение положения одного CATextLayer
, чтобы оно оставалось выровненным по правому краю, заставляет приложение тратить большую частьвремя выполнения функции CGSScanConvolveAndIntegrateRGB
(я использовал инструмент Time Profiler).
Самый «дорогой» слой (тот, который вызывает наибольшее заикание, даже если отображается только один) - это обернутая многострочная CATextLayer
.Я абсолютно не представляю, как повысить производительность (я пытался не использовать CAConstraintLayoutManager
и работать с выравниванием слоев, но получаю то же самое).У кого-нибудь была эта проблема?Есть ли способ обойти это?
PS: Я подклассифицировал менеджер раскладки и отключил все анимации во время выполнения - (void)layoutSublayersOfLayer:(CALayer *)layer
, установив YES на kCATransactionDisableActions
в CATransaction
, но это не такКажется, что помогает.
Редактировать: Я отключил сглаживание шрифтов для текстовых слоев, и производительность немного увеличилась (очень немного), но он тратит огромное количество времени в _ZL9view_drawP7_CAViewdPK11CVTimeStampb (это то, что вызывается потоком драйвера ATI Radeon, я полагаю).