Проблемы с использованием animateAlongsideTransition в presentationTransitionWillBegin

Я пытаюсь создать пользовательский переход для модально представленного контроллера представления, используя UIViewControllerTransitioningDelegate, UIViewControllerAnimatedTransitioning а также UIPresentationController,

В моем представлении контроллер представления я реализую UIViewControllerTransitioningDelegate и иметь следующие методы:

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

    return [[MyAnimationController alloc] initWithAnimationType:MyAnimationTypePresent];
}

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed {
    return [[MyAnimationController alloc] initWithAnimationType:MyAnimationTypeDismiss];
}

- (UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented
                                                  presentingViewController:(UIViewController *)presenting
                                                      sourceViewController:(UIViewController *)source {

    return [[MyPresentationController alloc] initWithPresentedViewController:presented presentingViewController:presenting];
}

Теперь в моем подклассе UIPresentationController Я добавляю затемнение вида под представленным контроллером представления и хочу добавить его вместе с переходом внешнего вида.

- (void)presentationTransitionWillBegin {
    self.dimmingView.alpha = 0.0f;
    [self.containerView insertSubview:self.dimmingView atIndex:0];
    [self.dimmingView autoPinEdgesToSuperviewEdges];

    [self.presentedViewController.transitionCoordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
        self.dimmingView.alpha = 1.0f;
    }
                                                                    completion:nil];
}

- (void)dismissalTransitionWillBegin {

    [self.presentedViewController.transitionCoordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
        self.dimmingView.alpha = 0.0f;
    }
                                                                    completion:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
                                                                        [self.dimmingView removeFromSuperview];                                                                 }];
}

Интересная и довольно неприятная вещь заключается в том, что анимация представления и удаления для моего представленного контроллера представления работает, как ожидалось и как реализовано в MyAnimationController, Что касается появления / исчезновения моего затемнения, оно работает только при отклонении представленного контроллера представления. При представлении это постепенное появление не анимируется вместе с переходом, а просто использует фиксированное количество времени. Я почти уверен, что реализовал все в соответствии с документацией Apple и несколькими учебными пособиями, но по какой-то причине это просто не будет работать так, как ожидалось. Любое предложение относительно того, что проблема может быть здесь?

1 ответ

Я считаю, что вы хотите использовать presentingViewController"s transitionCoordinator на презентации, и presentedViewConroller"s transitionCoordinator об увольнении. Вот почему он работает с увольнением, а не с презентацией, как вы это делаете в настоящее время.

Другие вопросы по тегам