Анимированный переход между двумя модальными контроллерами просмотра

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

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

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

Спасибо


person FishStix    schedule 04.11.2011    source источник


Ответы (1)


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

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

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

В ответ на ваше разъяснение:

Чтобы переключиться между двумя, попробуйте:

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

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

В -viewDidAppear: rootViewController

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

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

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

person Andrew    schedule 04.11.2011
comment
Каждый из этих модальных дисплеев по сути представляет собой отдельный экран-заставку / экран входа в систему. В зависимости от URL-адреса, используемого для входа в приложение, я показываю другую модальную заставку. Итак, если всплеск 1 появился из предыдущего использования приложения, и они входят в приложение по URL-адресу, запрашивающему всплеск 2, я бы хотел плавный переход от всплеска 1 к всплеску 2, не поднимая оба, один поверх другого. - person FishStix; 05.11.2011
comment
Я просто отслеживаю один UINavigationController в качестве моего modalController и передаю стек ViewControllers одному методу делегата, и если window.rootController имеет представленныйController, то он представляет modalController, и я просто заменяю viewControllers анимацией. В противном случае я все еще устанавливаю контроллеры представления modalController и вызываю window.rootController presentModalViewController: modalController - person FishStix; 08.11.2011