Анимированный переход между двумя модальными ViewControllers - PullRequest
5 голосов
/ 04 ноября 2011

Я пытаюсь переключаться между двумя различными активными контроллерами модального вида и пытаюсь получить плавную анимацию. В идеале мне бы хотелось, чтобы анимация выглядела так же, как новый модальный вид превращается в модальный вид по сравнению с текущим модальным видом.

Для согласованности в моем приложении мне нужно ограничить только один слой контроллеров модального представления, отображаемый в любой момент времени.

В настоящее время я просто отключаю существующий модальный вид без анимации, а затем анимирую следующий модальный вид через RootController, но это выглядит не очень хорошо.

Спасибо

1 Ответ

8 голосов
/ 04 ноября 2011

Вы можете просто представить 2-й контроллер вида модели поверх первого, используя переход по умолчанию.Похоже, что ваше второе представление модели выделяется и инициализируется в том же контроллере представления, что и ваше первое представление модели.Если это так, рассмотрите возможность рефакторинга вашего кода, чтобы у первого контроллера модели был второй контроллер модального представления.В этом случае один над другим будет отображаться так, как вы хотите.

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

Я бы определенно рекомендовал первое решение, хотя оно логически более понятно с меньшими шансами введения цикла сохранения.

В ответ на ваше уточнение:

Для перехода между двумя попытайтесь:

В вашем ModalViewControllerOne экземпляре, который уже отображается из предыдущего сеанса:

self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self dismissModalViewControllerAnimated:YES];

В вашем rootViewController -viewDidAppear:

ModalViewControllerTwo *modalViewControllerTwo = [[ModalViewControllerTwo alloc] init];
modalViewControllerTwo.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[rootViewController presentModalViewController:modalViewControllerTwo animated:YES];

Идея этого состоит в том, чтобы перекрестно растворить первый контроллер модального вида обратно в контроллер корневого представления, а затем немедленно перекрестно растворить новый модальный видконтроллер на экран.

Если между всплывающими экранами отличается только вид, вы можете вместо двух контроллеров представления иметь один контроллер вида с логикой, который просто заменяет один вид на другой в зависимости от вида.на введенный URL и используйте анимацию при переключении между представлениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...