我有一个ViewController可以说ViewControllerA
,而ViewController可以说ViewControllerB
。
ViewControllerB
使用自定义转换从ViewControllerA
以模态方式呈现。
在ViewControllerA中:
-(void)buttonClicked...
{
ViewControllerB * controller = [[ViewControllerB alloc] init];
[controller setModalPresentationStyle:UIModalPresentationCustom];
controller.transitioningDelegate = self;
[self presentViewController:controller animated:YES completion:nil];
}
在ViewControllerA中 -
#pragma mark - UIViewControllerTransitioningDelegate
-
(id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented
presentingController:(UIViewController *)presenting
sourceController:(UIViewController *)source
{
FadeInWithPopAnimator* fadeInAnimator = [[FadeInWithPopAnimator alloc] init];
return fadeInAnimator;
}
我有一个名为FadeInWithPopAnimator
的自定义Animator类,它实现了transitionDuration和animationTransition方法。
我希望在过渡动画开始后0.2秒,在呈现的viewcontroller上设置几个视图的动画 - ViewControllerB
。
我已经在线阅读了文档,看起来使用transitionCoordinator是一种可行的方法。 但是我应该把代码放在哪里?
1)在ViewControllerA
中调用presentViewController?
2)在Animator课程中?
3)在ViewControllerA
的viewWillAppear中?
我尝试过几件事,但它没有给我结果,但很难找到实例。
答案 0 :(得分:2)
在视图控制器的动画开始后,将在设置的视图控制器上设置TransitionCoordinator,因此在所呈现的视图控制器的viewWillAppear
中。在转换协调器上使用animateAlongsideTransition:completion:
添加任何额外的动画。对于ViewControllerB中的情况:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear];
[self.transitionCoordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
// change any properties on your views
} completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
}];
}