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