Я боролся с этой анимацией перехода, и у меня почти не осталось идей.Я пытаюсь сделать что-то похожее на переход из коллекции к отдельным фотографиям в приложении «Фотографии» на iOS.
Все это работает, к моему удовлетворению, за исключением того, что рамка для "большой" детализации изображения неверна.Это правильный размер, но он примерно на 87 пунктов ближе к верхней части экрана по сравнению с фактическим положением изображения в конечном состоянии.Это в значительной степени такая же высота, что и над «безопасной областью» (названия iPhone X + navItem) и раздражающе близко к тому, что также находится ниже безопасной области (панель инструментов и домашняя область iPhone X).
IGoogled (и "SO'd") кучу различных решений для аналогичных проблем звучания.Например: UIViewControllerAnimatedTransitioning со вставками безопасной области на iPhone X
Я скачал и просмотрел пример кода с Github.Например: https://github.com/SamStone92/CustomTransitions
Мне кажется, что в моей иерархии представлений (контроллеров) есть что-то, что усложняет это больше, чем большинство.Мне бы хотелось получить несколько советов о том, что может быть причиной проблемы и как я могу ее исправить.
Моя иерархия:
- NavigationController, содержащий корневой VC с UICollectionView.
- Нажатие на ячейку переходит к UIPageViewController для «подробного просмотра», где я могу просматривать страницы между элементами в коллекции.
- UIPageViewController имеет нижнюю панель инструментов в дополнение к панели навигации.
- Контент ViewController имеет ScrollView с UIImageView в нем для некоторого увеличения.
Похоже, что общий подход заключается в добавлении целевого представления в контейнер, форсировании прохода макета и затем получениирамка.Я пробовал много вариантов этого с и без преобразования координат.(кажется, они всегда остаются неизменными до и после преобразования)
Моя теория
Я склоняюсь к тому, что UIPageViewController является усложняющим фактором.Но я не смог распутать, как получить правильные координаты.
Представление назначения (в анимации) - это не представление содержимого, а представление PageVC, которое, в свою очередь, может добавлять или не добавлять представление содержимого., адаптировал его к элементу навигации или панели инструментов.
Похоже, viewWillAppear на контенте VC не имеет правильных координат.Я могу сказать, что представление подробного контента получает вызов viewWillLayoutSubviews после этого, а также после того, как весь материал делегирования анимации получил свою очередь.
Это наложение цвета моих основных видов.Серый цвет - это верхняя и нижняя части за пределами безопасной зоны.Синий - это то место, куда переход оживляет, прежде чем открывать зеленый цвет, лежащий в основе фактической позиции, к которой он должен был анимироваться.