Пользовательские переходы ViewController: получить фрейм подпредставления ToViewController
Вот иллюстрация моего вопроса:
У меня есть StarImageView в ViewControllers A & B, который отображает одно и то же изображение, но имеет разные кадры друг от друга в своем ViewController.
При нажатии StarImageView в ViewController A приложение помещает новый контроллер представления в стек контроллера навигации и в то же время выполняет анимацию до своего последнего кадра в ViewController B.
Это поведение аналогично переходу в приложении iPhone Фото.
Как я это делаю сейчас
Я инициализирую временный UIImageView в объекте-аниматоре с исходным кадром StarImageView и изображением в ViewController A, и анимирую его в окончательный кадр путем жесткого кодирования прямоугольника CGRectMake(0, 60+44, containerView.bounds.size.width, containerView.bounds.size.width)
(кадр StarImageView в ViewController B) и удаление временного UIImageView из суперпредставления в блоке завершения анимации.
Как я хочу сделать это вместо
Проект создается в раскадровке с включенной авторазметкой. То, что я хочу сделать, это получить кадр StarImageView в ViewController B во время перехода, а не жестко кодировать его, как описано выше. Из-за жизненного цикла ViewContorller я не могу ссылаться на какие-либо подпредставления в ViewController B в объекте аниматора, так как они еще не были инициализированы.
Есть ли другие решения или лучшие практики для таких ситуаций? Заранее спасибо!
2 ответа
Напишите следующий код в своем классе анимации
func animateTransition(using transitionContext: UIViewControllerContextTransitioning)
{
let containerView = transitionContext.containerView
let toVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)!
let yourVC = (toVC as! UINavigationController).viewControllers[0] as! YourVC;
yourVC.view.layoutIfNeeded();
destinationFrame = yourVC.youImageView.frame /*rest of code*/}
он получит кадр изображения в контроллере вида назначения.