Проблемы с использованием 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
об увольнении. Вот почему он работает с увольнением, а не с презентацией, как вы это делаете в настоящее время.