使用以编程方式创建的 segue IOS 调用自定义过渡动画器
Call custom transition animator using a programmatically created 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]
我应该如何在方法 -perform 中为上面以编程方式创建的 segue 定义,以便进行自定义转换。
您无需创建自定义 segue 即可执行您想要执行的操作。事实上,由于您的 2 个控制器位于不同的故事板中,因此您根本不应该使用 segue。只需实例化您的目标视图控制器,然后使用 pushViewController:animated: 启动转换。您的第一个视图控制器应该是导航控制器的委托,因此会调用您在问题顶部显示的委托方法。
在 navigationControllerAnimationControllerForOperation:fromViewController:toViewController:
中,您可以调整源和目标 viewControllers,并根据这些类型看到所需的动画。你不需要在这里使用prepareForSegue:
。
我正在处理的项目需要在两个视图控制器之间进行自定义转换。我已经通过覆盖以下方法设置并实现了 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]
我应该如何在方法 -perform 中为上面以编程方式创建的 segue 定义,以便进行自定义转换。
您无需创建自定义 segue 即可执行您想要执行的操作。事实上,由于您的 2 个控制器位于不同的故事板中,因此您根本不应该使用 segue。只需实例化您的目标视图控制器,然后使用 pushViewController:animated: 启动转换。您的第一个视图控制器应该是导航控制器的委托,因此会调用您在问题顶部显示的委托方法。
在 navigationControllerAnimationControllerForOperation:fromViewController:toViewController:
中,您可以调整源和目标 viewControllers,并根据这些类型看到所需的动画。你不需要在这里使用prepareForSegue:
。