Ответ 1
Хорошо, понял. Все это в документах, но я нахожу это довольно хорошо скрытым. Я разберу его на три случая, потому что думаю, что это может помочь другим. Почему я делаю это так сложно, а не используя [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