Я столкнулся с очень странной проблемой, и мне было интересно, может ли кто-нибудь помочь мне здесь, так как я полностью потерян.
Контекст: я разрабатываю приложение с относительно простой иерархией. Всего несколько контроллеров просмотра, но довольно много изображений в высоком разрешении. Они представлены в виде UIScrollView
с некоторым текстом и т. д. При тестировании в портретном режиме прокрутка не прокручивалась плавно. Казалось, что частота кадров упала примерно до 4-5 кадров в секунду. Сначала я подумал, что это из-за изображений в высоком разрешении.
Но затем я перевел iPad в ландшафтный режим, и все пошло гладко. Поскольку у меня есть отдельный xib-файл для портретной и альбомной ориентации, я подумал, что проблема должна быть в портретном xib. Оказалось, не было. У обоих был один и тот же VC-класс, и поэтому они использовали один и тот же код, и оба xib почти идентичны, за исключением размеров и позиций представлений.
Чтобы сузить проблему, я использовал инструмент TimeProfiler, чтобы увидеть, что вызывает проблему. Как оказалось, TimeProfiler показал некоторые вызовы [NSISEngine optimize]
(инициированные NSLayoutConstraint
). В портретном режиме было больше звонков и эти звонки длились намного дольше. Дальше по дереву я увидел, что в портретном режиме [NSISEngine optimize]
вызывает [NSISEngine fixupIntegralizationViolations]
, а в альбомном нет.
Я даже удалил все контроллеры просмотра из приложения, кроме rootVC и еще одного, который представлен rootVC. Представленный vc содержит только изображения, кнопки и анимацию. Он имеет только один xib для обеих ориентаций и (как и все остальные) выложен с автомакетом.
Макет работает как надо в обеих ориентациях, и нет никаких неясностей (насколько я могу судить, по крайней мере po [[UIWindow keyWindow] _autolayoutTrace]
ничего не показывает).
Я приложил скриншот TimeProfile процесса презентации vc. Один для портрета и один для пейзажа. Как видите, в альбомной ориентации вызовы [NSISEngine optimize]
занимают всего миллисекунду, а в портретной — более 3000 мс.
Есть ли кто-нибудь, кто может сказать мне, почему это так? Или, может быть, есть идеи, что я могу сделать, чтобы выяснить, в чем проблема?
Любая помощь будет принята с благодарностью!
Спасибо
Ссылка на увеличенную версию изображения: ссылка