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