Как я могу изменить стиль анимации модального UIViewController? - PullRequest
69 голосов
/ 26 октября 2008

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

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

и скрывая это так:

[self.navigationController dismissModalViewControllerAnimated:YES];

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

ура!

Ответы [ 4 ]

194 голосов
/ 05 января 2010

Для iPhone 3.0+ проще всего сделать базовое кроссфейдирование следующим образом:

modalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[[self navigationController] presentModalViewController:modalViewController
                                               animated:YES];
60 голосов
/ 26 октября 2008

Маркус Зарра опубликовал отличное решение в списке рассылки 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 за указание на это.

8 голосов
/ 08 октября 2010

Чтобы обновить альфа-замирания в 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;}];
2 голосов
/ 03 сентября 2010

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

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

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