У меня есть UINavigationController, на который я помещаю «загрузочный экран» UIViewController, когда я асинхронно подключаюсь к серверу. Толчок неявно оживляется с этим эффектом скольжения. Если во время подключения возникает ошибка, я вынимаю контроллер экрана загрузки (снова анимированный) и отображаю предупреждение для пользователя.
Все хорошо, если я выталкиваю контроллер вида после завершения анимации, однако, если анимация еще не завершена, происходят странные вещи. Обычно экран загрузки остается на экране, даже если он был извлечен из стека навигационных контроллеров. Я почти уверен, что проблема связана с анимацией. Например, этот придуманный фрагмент кода всегда оставляет для меня представление secondController на экране:
[navController pushViewController: secondController animated: YES];
[navController popToRootViewControllerAnimated: YES];
NSAssert([delegate.navigationController.viewControllers count] == 1, @"oops");
Мой текущий обходной путь - зарегистрировать делегата в контроллере навигации и реализовать navigationController: didShowViewController: animated: метод. Затем я выскакиваю только на экране контроллера загрузки, когда знаю, что первая анимация нажатия завершена. Однако я предпочел бы просто закончить анимацию рано.
Я попытался вызвать removeAllAnimations на всех слоях в дереве слоев для всех вложенных видов представления контроллера навигации. Несмотря на то, что этот подход завершил анимацию на ранней стадии, он все еще часто оставлял изображение экрана загрузки по-прежнему на дисплее после того, как оно появилось. Так в принципе, есть ли правильный способ закончить анимацию рано, или я должен просто продолжать свою работу?