使用以编程方式创建的segue IOS调用自定义过渡动画师

时间:2015-02-27 20:43:32

标签: ios objective-c iphone segue custom-transition

我正在处理的项目需要在两个视图控制器之间进行自定义转换。我已经通过重写方法设置并实现了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的原因:我在单独的故事板中从(转换自)到(转换到)视图控制器。

问题/疑问: 我看过很多例子,都使用故事板segue来处理自定义转换:

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

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

2 个答案:

答案 0 :(得分:0)

您无需创建自定义segue即可执行您要执行的操作。实际上,由于您将2个控制器放在不同的故事板中,因此根本不应使用segue。只需实例化目标视图控制器,并使用pushViewController:animated:来启动转换。您的第一个视图控制器应该是导航控制器的委托,因此您在问题顶部显示的委托方法会被调用。

答案 1 :(得分:0)

navigationControllerAnimationControllerForOperation:fromViewController:toViewController:中,您可以调整源和目标viewControllers,根据这些类型,您将看到所需的动画。您无需在此处使用prepareForSegue: