Пользовательский переход iOS7 вызывается дважды

#ios #ios7 #uitabbarcontroller #transitions

#iOS #ios7 #uitabbarcontroller #переходы

Вопрос:

Я хочу анимировать переходы между вкладками UITabBarController . По какой-то причине этот метод из UIViewControllerAnimatedTransitioning протокола вызывается дважды:

 - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
  

Трассировка стека:
введите описание изображения здесь
И сразу после:
введите описание изображения здесь
Также - (void)animationEnded:(BOOL)transitionCompleted метод вызывается дважды.

Я понятия не имею, почему.

Это код:

 - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {

    UIView *containerView = [transitionContext containerView];

    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    [toVC.view setTransform:CGAffineTransformMakeTranslation(320, 0)];

    [containerView addSubview:toVC.view];

    [UIView animateWithDuration:0.5 animations:^{
        [toVC.view setTransform:CGAffineTransformIdentity];
        [fromVC.view setTransform:CGAffineTransformMakeTranslation(-320, 0)];
    } completion:^(BOOL finished) {
        [fromVC.view setTransform:CGAffineTransformIdentity];
        [toVC.view setTransform:CGAffineTransformIdentity];
        [transitionContext completeTransition:YES];
    }];

}
  

Комментарии:

1. Как вы начинаете переход? Segue? Метод вызова?

Ответ №1:

Для первого впечатления я полагаю, что - (void)animationEnded:(BOOL)transitionCompleted вызывается дважды, потому что вы вызываете [transitionContext completeTransition:YES] , что основано на документах Apple:

Вызовите этот метод после завершения анимации, чтобы уведомить систему о том, что анимация перехода выполнена. Реализация этого метода по умолчанию вызывает метод animationEnded: аниматора, чтобы дать ему возможность выполнить любую очистку в последнюю минуту.

И если UIViewControllerAnimatedTransitioning вызывается дважды, то вот так.

Для дальнейшего анализа того, почему UIViewControllerAnimatedTransitioning вызывается дважды, я был бы рад увидеть вашу animationControllerForPresentedController и animationControllerForDismissedController реализацию.