使用 UIViewControllerTransitionCoordinator animateAlongsideTransition 方法

new*_*bie 5 objective-c ios ios7 ios-animations

我有一个 ViewController 可以说ViewControllerA,还有一个 ViewController 可以说ViewControllerB。

ViewControllerBViewControllerA通过使用自定义转换以模态方式呈现。

在视图控制器A中:

-(void)buttonClicked...
{
  ViewControllerB * controller = [[ViewControllerB alloc] init];
  [controller setModalPresentationStyle:UIModalPresentationCustom];
  controller.transitioningDelegate = self;
  [self presentViewController:controller animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

在 ViewControllerA 中 -

#pragma mark - UIViewControllerTransitioningDelegate

- 

(id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented
                                                                      presentingController:(UIViewController *)presenting
                                                                          sourceController:(UIViewController *)source 
{

   FadeInWithPopAnimator* fadeInAnimator = [[FadeInWithPopAnimator alloc] init];
   return fadeInAnimator;
 }
Run Code Online (Sandbox Code Playgroud)

我有一个名为的自定义 Animator 类FadeInWithPopAnimator,它实现了transitionDuration 和animationTransition 方法。

ViewControllerB我想在过渡动画开始 0.2 秒后,在呈现的视图控制器上对几个视图进行动画处理。

我已经阅读了在线文档,看起来使用过渡协调器是正确的方法。但我应该把代码放在哪里呢?

1)在调用presentViewController时ViewControllerA?

2)在动画师类中?

3)在viewWillAppear中ViewControllerA?

我尝试了一些方法,但它没有给我结果,而且很难找到例子。

sas*_*ash 5

呈现的视图控制器上的 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) {


    }];
}
Run Code Online (Sandbox Code Playgroud)