使用UIViewControllerTransitionCoordinator animateAlongsideTransition方法

时间:2016-05-11 06:30:26

标签: ios objective-c ios7 ios-animations

我有一个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中?

我尝试过几件事,但它没有给我结果,但很难找到实例。

1 个答案:

答案 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) {


    }];
}