iPhone: Как сделать анимацию presentModalViewController слева направо

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

7 ответов


есть только четыре!--1-->s:

UIModalTransitionStyleCoverVertical
UIModalTransitionStyleFlipHorizontal
UIModalTransitionStyleCrossDissolve
UIModalTransitionStylePartialCurl

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


вы можете анимировать справа налево, представляя контроллер вида, используя следующий код

CATransition *transition = [CATransition animation];
            transition.duration = 0.4;
            transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
            transition.type = kCATransitionPush;
            transition.subtype = kCATransitionFromRight;
            [self.view.window.layer addAnimation:transition forKey:nil];
            [self presentViewController:localitiesView animated:NO completion:nil];

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

    UIViewController *modalView = //init your UIViewController
    [modalView loadView];
    CGRect finalFrame = modalView.view.frame;
    [modalView.view setFrame:CGRectMake(-320, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [UIView animateWithDuration:1.0 animations:^{
                    [self.navigationController setNavigationBarHidden:YES];
                    [self.view addSubview:modalView.view];
                    [modalView.view setFrame:finalFrame];
                }];

надеюсь, что это помогает.


UINavigationController есть navigationBarHidden свойство - если вы установите значение Да, вы можете получить стиль перехода слева направо и другие тонкости навигационного контроллера без видимой панели навигации.


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

AddViewController *controller = [[AddViewController alloc] initWithNibName:@"AddViewController" bundle:[NSBundle mainBundle]];
    controller.blogs = self.blogs;
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
    navController.toolbarHidden = YES;
    navController.navigationBarHidden = YES;
    self.modalPresentationStyle = UIModalPresentationCurrentContext;
    [self presentModalViewController:navController animated:NO];

    navController.view.frame = CGRectMake(0, -480, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 20);
    navController.view.hidden = NO;
    [UIView animateWithDuration:0.3
                     animations:^{
                         navController.view.frame = CGRectMake(0, 20, navController.view.frame.size.width, navController.view.frame.size.height);
                     }];

вы можете попробовать что-то вроде этого:

   UIViewController *fooViewController = [[[UIViewController alloc] init] autorelease];

        CGSize theSize = CGSizeMake(320, 460);
        fooViewController.view.frame = CGRectMake(0 - theSize.width, 0, theSize.width, theSize.height);
        [UIView beginAnimations:@"animationID" context:NULL];

        fooViewController.view.frame = CGRectMake(0, 0, 320, 460);

        [UIView commitAnimations];

возможный дубликат с дополнительной информацией для отклонения modalViewController с обратной анимацией справа налево :- dismissModalViewController с переходом: слева направо