Ладно, разобрался.Это все в документах, но я нахожу это довольно хорошо спрятанным.Я разделю это на три случая, потому что я думаю, что это могло бы помочь другим.Почему я так усложняю вместо использования [UIViewController transitionFromViewController:toViewController:duration:options:animations:completion]
?Ответ заключается в том, что вы можете использовать метод перехода, только если уже существует контроллер представления.Если вы хотите перейти от «без контроллера» к какому-либо контроллеру или наоборот, вышеприведенный метод вызовет исключение.
Случай 1: Оба контроллера равны - это означает, что обаnull
- Ничего не делать, у нас уже есть то, что мы хотим на экране.: -)
Случай 2: Старый контроллер имеет значение NULL, а новый контроллер не равен NULL.Просто добавьте новый контроллер.
- Отправьте
addChildViewController
на новый контроллер - это вызовет неявное willMoveToParentViewController
- Сделайте новый вид нужного размера
- Вставьте представление дочернего контроллера в иерархию представлений этого контроллера:
addSubview
- Сообщите дочернему контроллеру, что он был добавлен как дочерний, отправив его:
didMoveToParentViewController
Случай 3: старый контроллер не равен NULL, а новый контроллер не равен NULL.Запустите переход между контроллерами.
- Настройте рамки / границы нового представления.
- Отправьте
addChildViewController
на новый контроллер - это вызовет неявное willMoveToParentViewController
- Отправьте старый контроллер
willMoveToParentViewController
и передайте его как ноль в качестве нового родителя - Добавьте новое подпредставление к вашему представлению
- Запустите пользовательский переход между старым и новым представлениями с использованием
UIView's
анимаций. - В конце делегата анимации отправьте
didMoveToParentViewController
новому контроллеру. - Удалите представление старого контроллера из его суперпредставления.
- Отправьте
removeFromParentViewController
встарый контроллер - это вызовет неявное didMoveToParentViewController