Справка по анимации iPhone Modal View - PullRequest
4 голосов
/ 21 июля 2011

Я не сделал много анимации, и мне нужна помощь с этим. У меня есть tabBarController в качестве моего корневого контроллера, и я хочу иметь еще один tabBarController, и я хочу использовать его как Modal View Controller, и у меня проблема с анимацией.

В настоящее время есть четыре анимации для modalViewControllers, а именно

typedef enum {
UIModalTransitionStyleCoverVertical = 0,
UIModalTransitionStyleFlipHorizontal,
UIModalTransitionStyleCrossDissolve,
UIModalTransitionStylePartialCurl,
} UIModalTransitionStyle;

Я хочу другую анимацию - скользить справа налево. - Как я могу сделать эту анимацию?

Любая помощь с этим?


Редактировать:

Моя идея поместить tabBarController в стек навигации - отстой! Комментарий Apple об этом подходе:

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

У меня нет идей. Кто-то поможет мне с анимацией для модальных контроллеров представления.

Ответы [ 3 ]

4 голосов
/ 26 июля 2011

Вы можете написать код анимации вручную.Вот общие шаги:

  • Создайте подкласс UIViewController (по сути, контроллер dud для размещения вашего UITabBarController) - я обычно называю это ShellViewController.
  • Вметод ShellViewController init (какой бы метод вы ни использовали), установите его frame вне экрана справа, например, [self.view setFrame:CGRectMake(320, 0, 320, 480)];
  • Создайте два метода в ShellViewController
    • - (void)presentSelf
    • - (void)dismissSelf
  • Создайте экземпляр ShellViewController, если вы хотите представить UITabBarController
  • Поместите свой экземпляр UITabBarController внутри экземпляра ShellViewController
  • . Вызовите [currentView addSubview:shellViewController.view];
  • Используйте приведенные выше пользовательские методы для представления и отклонения ShellViewController, в котором находится ваш UITabBarController
  • Работа с управлением памятью в соответствии с вашей бизнес-логикой

Вот код для анимации (например, метод - (void)presentSelf):

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.15]; //the double represents seconds
[UIView setAnimationDelegate:self];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[[self view] setFrame:CGRectMake(0, 0, 320, 480)];
[UIView commitAnimations];

Воткод для анимации (например, метод - (void)dismissSelf):

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.15];
[UIView setAnimationDelegate:self];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[[self view] setFrame:CGRectMake(320, 0, 320, 480)];
[UIView commitAnimations];

Имейте в виду, что эти методы анимации делают только that: animate.Они не отключают взаимодействие ни с текущим представлением, ни с представлениями / подпредставлениями ShellViewController, которые анимируются.Вам нужно будет вручную отключить взаимодействие с пользователем во время анимации, а затем восстановить его после завершения анимации.Существует метод UIView, который выполняет селектор после завершения анимации:

[UIView setAnimationDidStopSelector:@selector(enableUserInteraction)];

Вы можете поставить это сразу после [UIView setAnimationDelegate:self] в каждом блоке анимации выше.Конечно, вам нужно было бы написать метод enableUserInteraction самостоятельно ... и метод disableUserInteraction в этом отношении.

Идти по этому пути хлопотно, но он работает.Как только вы написали ShellViewController, это дает хороший многоразовый фрагмент.

1 голос
/ 22 июля 2011

Вставьте свой контроллер панели вкладок корня в UINavigationController. Если он не позволяет вам, вставьте между ними UIViewController (делая: UINavigationController встраивает UIViewController, к которому добавлено представление UITabBarController). Это противно-плохо, но должно (!) Работать.

0 голосов
/ 28 июля 2011

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

Зачем вам нужна панель вкладок в модальном представлении?Обычно модальные представления используются для таких вещей, как ввод данных, воспроизведение аудио и т. Д. На панели вкладок HIG указано "в общем, используйте панель вкладок для организации информации на уровне приложения".Наличие панели вкладок в контроллере модального представления нарушает это.Разумеется, не обязательно точно следовать всем рекомендациям HIG, но это тот случай, когда вам действительно следует учитывать рекомендации Apple.

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

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