Ios 使用自定义动画显示ViewController

Ios 使用自定义动画显示ViewController,ios,objective-c,animation,uiviewcontroller,Ios,Objective C,Animation,Uiviewcontroller,我正在介绍一个使用foll的视图控制器。代码: VC_B * b = [[VC_B alloc] init...]; [self presentViewController:b animated:YES completion:nil]; 我正在尝试为视图控制器的外观设置动画:传入的VC应该从当前显示的覆盖VC的顶部向下滑动。以下解决方案解决了一个问题:当前VC在屏幕上显示传入VC之前消失。有办法解决这个问题吗?也许有另一种方法可以达到这个效果。试试下面的代码。您只需要从要显示NewViewCo

我正在介绍一个使用foll的视图控制器。代码:

VC_B * b = [[VC_B alloc] init...];
[self presentViewController:b animated:YES completion:nil];

我正在尝试为视图控制器的外观设置动画:传入的VC应该从当前显示的覆盖VC的顶部向下滑动。以下解决方案解决了一个问题:当前VC在屏幕上显示传入VC之前消失。有办法解决这个问题吗?也许有另一种方法可以达到这个效果。

试试下面的代码。您只需要从要显示NewViewController的位置调用下面的方法。您需要做的是只需要更改NewViewcOntroller的图幅的原始坐标

-(void)displayNewVC
 {

 YourNewViewController *newVC = [[YourNewViewController alloc] init];

CGFloat originY = -450;//set originY as you want to display newViewController from the Top to bottom with animation
//initially set originY out of the Frame of CurrentViewcontroller
newVC.view.frame = CGRectMake(orginX, originY, newVC.view.frame.size.width, newVC.view.frame.size.height);

/*Display View With Animation*/
 originY = 300;
[UIView animateWithDuration:.3 animations:^{
     //set new originY as you want.
    newVC.view.frame = CGRectMake(orginX, originY, newVC.view.frame.size.width,  newVC.view.frame.size.height);
    
 } completion:NULL];

 [currentViewController.view addSubview:newVC.view];

 }
请尝试以下代码:

CreateNewViewController *newViewController = [[CreateNewViewController alloc]initWithNibName:@"CreateNewViewController" bundle:nil];

    CATransition *transition = [CATransition animation];
    transition.duration = 0.05;
    transition.timingFunction = [CAMediaTimingFunction      
    functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type =kCATransitionMoveIn;
    transition.subtype =kCATransitionFromTop;

    transition.delegate   = self;

    [self presentModalViewController:newViewController animated:NO];
    [self.view insertSubview:newViewController.view atIndex:0];

    [self.view.layer addAnimation:transition forKey:nil];

希望这对你有帮助

您能解释一下
animateWithDuration
call中的原始用法吗?@Asahi您希望在CurrentViewController中显示新的ViewController。我刚刚给出了一个示例,请尝试一下……您的原始答案中没有使用它。好的,现在-是否尝试使用presentViewController而不是addSubview来执行此操作?@Asahi Nops,举个例子,因为您正在谈论自定义动画。这取决于您想要使用什么。