Отображение анимации pushviewcontroller выглядит как presentModalViewController - PullRequest
35 голосов
/ 01 октября 2010

Можно ли показать pushViewController анимацию, похожую на presentModalViewController, но с фоновой функциональностью pushViewController?

Ответы [ 5 ]

56 голосов
/ 28 марта 2011

Если вы хотите, чтобы анимация исчезла, этот подход работает.

CATransition* transition = [CATransition animation];
transition.duration = 0.3;
transition.type = kCATransitionFade;
transition.subtype = kCATransitionFromTop;

[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
[self.navigationController pushViewController:gridController animated:NO];
49 голосов
/ 20 октября 2010

Попробуйте это:

UIViewController *yourViewController = [[UIViewController alloc]init];

[UIView  beginAnimations: @"Showinfo"context: nil];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.75];
[self.navigationController pushViewController: yourViewController animated:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
[UIView commitAnimations];
24 голосов
/ 23 марта 2015

Для отображения анимации PushViewConttroler, как работает приведенный ниже код,

Для Push

 ViewController *VC = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
 CATransition* transition = [CATransition animation];
 transition.duration = 0.4f;
 transition.type = kCATransitionMoveIn;
 transition.subtype = kCATransitionFromTop;
 [self.navigationController.view.layer addAnimation:transition
                                                    forKey:kCATransition];
 [self.navigationController pushViewController:VC animated:NO];

А для ПОП

CATransition* transition = [CATransition animation];
transition.duration = 0.4f;
transition.type = kCATransitionReveal;
transition.subtype = kCATransitionFromBottom;
[self.navigationController.view.layer addAnimation:transition
                                            forKey:kCATransition];
[self.navigationController popViewControllerAnimated:NO];

Тем не менее, существует одна проблема: дисплей светится черным фоном при движении вверх / вниз
Работая над этим, как только это будет сделано, отправьте новый код здесь.

1 голос
/ 24 октября 2018

Для всех пробующих в Xamarin (C #) эквивалентный код От Ответа @hardik Thakkar выше, есть проблема черного фона во время анимации, все остальное хорошо.

Для POP

    CATransition transition = CATransition.CreateAnimation();
    transition.Duration = 0.4;
    transition.Type = CAAnimation.TransitionReveal;
    transition.Subtype = CAAnimation.TransitionFromTop;
    this.NavigationController.View.Layer.AddAnimation(transition, nameof(CATransition));

для толчка

    CATransition transition = CATransition.CreateAnimation();
    transition.Duration = 0.4;
    transition.Type = CAAnimation.TransitionReveal;
    transition.Subtype = CAAnimation.TransitionFromBottom;
    this.NavigationController.View.Layer.AddAnimation(transition, nameof(CATransition));
0 голосов
/ 05 октября 2010

Вы должны подумать о том, чтобы сделать что-то вроде:

ViewController *myVC = [[ViewController alloc] initWithFrame:OFF_SCREEN];
[navigationController pushViewController:myVC animated:NO];

где OFF_SCREEN - это некоторый CGRect под экраном, например (0, 481, 320, 480). Затем используйте блок анимации, чтобы настроить frame.origin представления viewcontroller на (0, 0). Возможно, вы захотите сделать блок анимации в viewDidLoad или viewDidAppear.

...