Как я могу изменить стиль анимации модального UIViewController?

В настоящее время я показываю UIViewController следующим образом:

[[self navigationController] presentModalViewController:modalViewController animated:YES];

и скрываем это вот так:

[self.navigationController dismissModalViewControllerAnimated:YES];

Анимация выглядит как «скольжение вверх снизу» ... затем скольжение обратно вниз. Как я могу изменить стиль анимации? Могу ли я сделать его постепенным появлением / исчезновением?

Ваше здоровье!


person MrDatabase    schedule 26.10.2008    source источник


Ответы (4)


Маркус Зарра опубликовал отличное решение этой проблемы в списке рассылки SDK:

UIViewController *controller = [[[MyViewController alloc] init] autorelease];
UIViewAnimationTransition trans = UIViewAnimationTransitionCurlUp;
[UIView beginAnimations: nil context: nil];
[UIView setAnimationTransition: trans forView: [self window] cache: YES];
[navController presentModalViewController: controller animated: NO];
[UIView commitAnimations];

Есть переходы для перелистывания и перелистывания страниц. Если вы настроены на затухание, можете попробовать настроить альфа-канал вашего нового представления:

UIViewController *controller = [[[MyViewController alloc] init] autorelease];
controller.view.alpha = 0.0;
[navController presentModalViewController: controller animated: NO];
[UIView beginAnimations: nil context: nil];
controller.view.alpha = 1.0;
[UIView commitAnimations];

Однако вы, вероятно, захотите перекрестного затухания или, по крайней мере, затухания. Когда UINavigationController переключается на новый вид, он удаляет старый. Для этого эффекта вам, вероятно, лучше просто добавить новое представление к существующему UIViewController и со временем уменьшить его альфа-канал.

Примечание. Если вы не в своем приложении, то [собственное окно] работать не будет. Используйте self.view.window, спасибо сообщению user412500 за указание на это.

person Ben Gottlieb    schedule 26.10.2008
comment
Это старое! См. Ответ Симо Салминена ниже! MrDatabase вы должны переключить это - person Adam Waite; 14.09.2012

Для iPhone 3.0+ простой кроссфейд проще всего сделать так:

modalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[[self navigationController] presentModalViewController:modalViewController
                                               animated:YES];
person Simo Salminen    schedule 05.01.2010
comment
Прекрасно работает !!! Мне потребовалось несколько секунд, чтобы понять, что переход должен быть применен к представителю viewController, а не к самому себе. - person looneydoodle; 20.04.2011
comment
Вы можете сделать это в Интерфейсном Разработчике, например, добавив модальный переход и установив для перехода значение Cross Dissolve. - person paulvs; 27.08.2015

Чтобы обновить альфа-затухание в iOS 4:

modalController.view.alpha = 0.0;
[self.view.window.rootViewController presentModalViewController:modalController animated:NO];
[UIView animateWithDuration:0.5
                 animations:^{modalController.view.alpha = 1.0;}];
person Peter DeWeese    schedule 08.10.2010

Он должен быть [self.view.window], чтобы код работал

(по крайней мере, так, как в ios 3.2)

person user412500    schedule 02.09.2010