Есть ли способ использовать UIViewAnimationOptionTransitionCurlUp без анимации всего экрана? - PullRequest
7 голосов
/ 14 января 2011

У меня есть контроллер представления, имеющий следующую иерархию:

UIViewController
|
| -View
| -presentView (UIView)
| -stagedView (UIView)
| -UIToolbar

Я использую метод transitionFromView:toView:duration:options:completion:, чтобы анимировать свернутую страницу, чтобы поменять местами presentView и stagedView. Настоящий и поэтапный вид охватывает только большинство экрана, а внизу находится панель инструментов UIToolbar. Когда я использую переход UIViewAnimationOptionTransitionCurlUp, он анимирует весь корневой вид (включая панель инструментов), а не только два задействованных вида.

[UIView transitionFromView:self.presentView
                    toView:self.stagedView 
                  duration:0.5f 
                   options:UIViewAnimationOptionTransitionCurlUp
                completion:^ (BOOL finished) {
                                   if (finished) {
                                      // cleanup code
                                   }}];

Есть ли способ анимировать только два подпредставления, оставив панель инструментов в покое? Если да, то как?

Ответы [ 3 ]

3 голосов
/ 30 января 2011

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

UIViewController
|
|-view
   |-containerView
      |-presentView
   |-stagedView
   |-UIToolBar

Параметр fromView по-прежнему должен указывать на presentView. Надеюсь, это поможет.

2 голосов
/ 19 марта 2011

Этот урок объясняет это отлично.

http://joris.kluivers.nl/iphone-dev/?p=CurlTransition

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

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.5f];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:containerView cache:NO];
[presentView removeFromSuperview];
[containerView addSubview:nextView];
[UIView commitAnimations];
0 голосов
/ 14 января 2011

Уэйн, я предлагаю вам использовать панель вкладок, а затем реализовать ее метод делегата. Я только что сделал это для вас

   - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
    {
        //NSArray *vc= tabBarController.viewControllers;
    //  for (int i = 0; i < [vc count]; i++) {
    //      UINavigationController *nc = [vc objectAtIndex:i];
    //      if (nc == tabBarController.selectedViewController) {
    //          continue;
    //      }
            [UIView beginAnimations:@"animation" context:nil];
            //[self.navigationController pushViewController:nc.topViewController animated:NO]; 
            [UIView setAnimationDuration:1.5];
            [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:viewController.view cache:NO]; 
            [UIView commitAnimations];
        return TRUE;

    }

Вот только логика с панелью вкладок, она только переворачивает представление, а не панель вкладок. Так что я надеюсь, что то же самое вы могли бы с ToolBar. Ну, это просто даст вам идею. Надеюсь, что это может помочь вам

...