Невозможно получить правильный кадр для UIViewControllerAnimatedTransitioning в UIPageViewController - PullRequest
0 голосов
/ 02 октября 2018

Я боролся с этой анимацией перехода, и у меня почти не осталось идей.Я пытаюсь сделать что-то похожее на переход из коллекции к отдельным фотографиям в приложении «Фотографии» на 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 после этого, а также после того, как весь материал делегирования анимации получил свою очередь.

Это наложение цвета моих основных видов.Серый цвет - это верхняя и нижняя части за пределами безопасной зоны.Синий - это то место, куда переход оживляет, прежде чем открывать зеленый цвет, лежащий в основе фактической позиции, к которой он должен был анимироваться.

image

...