使用编程创建的segue IOS调用自定义转换动画师



我正在处理的项目需要在两个视图控制器之间进行自定义转换。我已经通过重写以下方法设置并实现了UIViewControllerTransitioningDelegate:

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                              animationControllerForOperation:(UINavigationControllerOperation)operation
                                           fromViewController:(UIViewController *)fromVC
                                             toViewController:(UIViewController *)toVC
{
   //Creation of animation
   id<UIViewControllerAnimatedTransitioning> animationController;
   MyAnimator *animator = [[MyAnimator alloc] init];
   animator.appearing = YES;
   animationController = animator;
   return animator
}

我已经设置了MyAnimator子类,通过重写方法来正确实现UIViewControllerAnimatedTransitioning:

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    //custom transition animation
}

我用来触发这个动画转换的segue是通过编程创建和调用的,比如:

UIStoryboardSegue *segue = [[UIStoryboardSegue alloc] initWithIdentifier:@"showCardDetail" source:self destination:vc];
[self prepareForSegue:segue sender:self];
[segue perform];

以编程方式创建segue的原因:我在单独的故事板中有from(transition from)和to(transition to)视图控制器。

问题/问题:我见过很多例子,都是使用故事板片段来处理自定义转换,比如:

[self performSegueWithIdentifier:@"storyboardSegue-id" sender:self]

我应该如何在方法-执行中定义上面以编程方式创建的segue,以便进行自定义转换。

你不需要创建一个自定义的segue来做你想做的事情。事实上,由于你的两个控制器都在单独的情节串连板中,所以你根本不应该使用segue。只需实例化目标视图控制器,然后使用pushViewController:animated:来启动转换。您的第一个视图控制器应该是导航控制器的委托,因此会调用您在问题顶部显示的委托方法。

navigationControllerAnimationControllerForOperation:fromViewController:toViewController:中,您可以调整源视图和目标视图控制器,基于这些类型,您将看到所需的动画。您不需要在此处使用prepareForSegue:

最新更新