Нужно доделать приложение на ios
Приложение создано на objective-C.
Требуется анимировать смену размера rootView синхронно с системной анимацией поворота экрана при смене ориентации устройства. Высокоуровневые механизмы анимирования UIView (например UIViewControllerTransitionCoordinator::animateAlongsideTransition в UIViewController::viewWillTransitionToSize) тут не применимы, потому что содержимое rootView отрисовывается с помощью Metal, следовательно если через такую анимацию изменять frame, то в процессе анимации искажается соотношение сторон содержимого rootView.
Есть уже часть необходимой анимации на основе CADisplayLink (ios/ViewController.mm ViewController::resizeViewAnimation). И у этой реализации есть плавающая проблема (вероятно связанная с зависимостью от фреймрейта): анимация изменения размера rootView не всегда совпадает с системной анимацией поворота экрана и как следствие, возникают черные полосы справа и снизу rootView (см. приложенные файлы bug.mp4 и bug.png). Проблема плавающая: она периодически может возникать и пропадать, вероятно это зависит от уровня заряда аккумулятора устройства, количества запущенных в фоне приложений и положения звезд на небе.
Требуется поправить текущую реализацию, если не выйдет то создать новую, в которой бы изменение размера rootView всегда происходило абсолютно синхронно с системной анимацией поворота экрана при смене ориентации устройства. Также было бы здорово, если бы получилось сделать эту анимацию более плавной чем это выглядит сейчас (см. приложенный файл bug.mp4). В текущей реализации видна ступенчатость анимации (вероятно это связано с линейной интерполяцией ios/ViewController.mm ViewController::lerp).
Важно что бы анимация одинакого хорошо работала на всех устройствах (iPhone и iPad). В реализации не следует использовать сторонних библиотек, необходимо реализовать все стандартными инструментами iOS/UIKit/objective-C.
Что бы собрать проекта нужно будет Cmake >=3.19 и Qt 6.6.1 (iOS), установить его можно с сайт, через MaintenanceTool. Для сборки необходимо в терминале перейти в директорию проета и запустить скрипт build.ios.sh. После успешной сборки в директории проекта появится каталог build.ios с проектом xcodeproj, который можно открыть и собрать в Xcode. Если есть необходимость запустить проект в симуляторе, то следует запустить скрипт build.ios.simulator.sh и открыть xcodeproj из каталога build.ios.simulator, но я настоятельно рекомендую проводить тестирование на реальном устройстве: на примере моей реализации видно, что поведение анимации в симуляторе не совпадает с ее поведением на устройстве. Для тестирования желательно использовать устройство с iOS не старше 16.7.3. В более поздних версиях, фон отображаемый при системной анимации смены ориентации был заменен на черный, когда как в версиях <=16.7.3 он представляет собой затемненный фон рабочего стола (см. приложенные файлы bug.mp4 и bug.png), что позволит более прицельно отследить синхронность анимаций. И так же запустить проект на реальном устройстве можно например при помощи AltStore.