анимацияControllerForOperation не вызывается после того, как приложение переходит в фоновый режим

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

Однако, если вы помещаете контроллер представления в стек, запускаете приложение в фоновом режиме, возвращаетесь, а затем нажимаете назад, метод делегата animationControllerForOperation не вызывается, как должно быть. во время отладки я убедился, что self.navigationController.delegate все еще правильно установлен, когда мы возвращаем приложение на передний план, но обратный вызов делегата никогда не выполняется. Есть идеи?

 //presenting vc
 - (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                              animationControllerForOperation:(UINavigationControllerOperation)operation
                                           fromViewController:(UIViewController*)fromVC
                                             toViewController:(UIViewController*)toVC
{
    if (operation == UINavigationControllerOperationPush) {
        _animationObject = [LVDashboardExplainerAnimation new];
        _animationObject.presenting = YES;
        return _animationObject;
    } else if (operation == UINavigationControllerOperationPop) {
        _animationObject.presenting = NO;
        return _animationObject;
    }
    return nil;
}

//other VC
- (void)headerTapped {
    self.navigationController.delegate = _navigationDelegate; //correct object
    [self.navigationController popViewControllerAnimated:YES];
}

person Todd Anderson    schedule 27.10.2014    source источник


Ответы (1)


Проблема возникла из-за ручного вызова viewWillAppear:animated, когда приложение вернулось из фонового режима. Вызывая это, делегат навигации будет вызывать willShowViewController:animated: но не navigationController:animationControllerForOperation: или didShowViewController:animated:

По какой-то причине принудительный вызов viewWillAppear отбрасывает все это. Даже если мы учли это и установили для делегата навигации значение nil, а затем вернули правильный объект, функциональность не работала бы правильно. Я предполагаю, что это ошибка в SDK, но сейчас мы удалили принудительный вызов viewWillAppear.

person Todd Anderson    schedule 29.10.2014