Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Есть только четыре UIModalTransitionStyle s:

UIModalTransitionStyleCoverVertical
UIModalTransitionStyleFlipHorizontal
UIModalTransitionStyleCrossDissolve
UIModalTransitionStylePartialCurl

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

Ответ 2

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

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];

Ответ 3

У меня возникла проблема с решением Мэтью, потому что представление, представляющее мое модальное представление, не будет отображаться во время анимации (вместо этого представление представления будет заменено фоном Window, а модальное представление затем будет одушевлено), что привело к яростный опыт. Вместо этого я добавил модальное представление в качестве подчиненного представления представления 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];
                }];

Надеюсь, что это поможет.

Ответ 4

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

Ответ 5

Просто хотел показать другой вариант - этот позволяет вам представить представление сверху вниз, используя анимацию 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);
                     }];

Ответ 6

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

   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];