У меня есть простое приложение, которое отображает список элементов, используя NSTableView. Обычно в списке около 15-25 элементов, и таблица имеет 10 столбцов, все из которых, кроме одного, являются текстовыми (другой - пиктограммой). На двух столбцах расположены простые преобразователи данных. Так что ничего не ругает; вы ожидаете, что он будет работать нормально.
И как оно есть, так и есть; приложение отзывчиво и все рисует практически мгновенно. Прокрутка, изменение размеров столбцов, изменение размера окна; что бы вы ни делали, перерисовки идут в ногу с указателем мыши.
Сегодня вечером я подумал, что попробую добавить немного визуального изящества в приложение с Core Animation (которое я никогда раньше не использовал), но я обнаружил, что если что-нибудь выше NSTableView в устанавливается иерархия «Требуется основной слой анимации», затем перерисовки NSTableView идут в ад. Прокрутка обычно хороша, но изменение размера столбцов или окна заставляет его подобрать эффект, такой как разрыв текстуры, когда некоторые строки имеют новый размер, а некоторые имеют старый, и все ужасно мерцает. Это выглядит ужасно. По сути, это выглядит так, как вы ожидаете, если визуализация отдельных строк или столбцов занимает много времени.
Я пропустил его через Акулу и, конечно же, похоже, что он проводит большую часть своего времени, рисуя текст в ячейках; я не понимаю, почему это должно занять больше времени, когда задействован слой Core Animation, чем когда его нет - и при этом заметно дольше.
У кого-нибудь есть идеи? Есть ли какая-либо инициализация или конфигурация Core Animation, которую я пропустил или что-то еще (я буквально поставил галочку в поле «Wants Core Animation Layer» в IB)?
Приветствия
Будет