Какая потребность в UIPresentationController помимо помощи в сборе признаков в iOS?
Каковы преимущества UIPresentationController по сравнению с простым добавлением подпредставлений и анимацией представления, в котором вы хотите представить? Кажется, что он немного громоздок со всем протоколом, которому он должен соответствовать, и многие люди все еще предпочитают представлять свой вид с простой анимацией кадров. Какова была логика Apple при представлении класса?
1 ответ
Презентационная техника была частью UIKit задолго до того, как был представлен UIPresentationController. UIPresentationController обеспечивает большую гибкость и позволяет создавать собственные презентации, помимо встроенных (полноэкранный, текущий контекст, всплывающее окно и т. Д.). Существует несколько причин существования механизма представления и UIPresentationController:
- Управление иерархиями представления. Всякий раз, когда вы хотите представить представление, вам не всегда принадлежит контроллер представления. Обычно не рекомендуется вмешиваться в подчиненную иерархию контроллера представления, которым вы не владеете, но в случае презентации вам нужно будет добавить представление представленного контроллера представления как дочернее представление представления контроллера представления (или его суперпредставления), Это становится более сложным, когда задействованы цепочки представления в контексте (например, popover -> текущий контекст -> разделить лист). Когда используется механизм представления, UIKit обеспечивает последовательное управление иерархией представления. Он также устанавливает контейнерное представление для класса UIPresentationController, чтобы позволить ему сосредоточиться на управлении только представлениями, участвующими в презентации. Класс UIPresentationController может выбрать добавление произвольных декораций и теней к представлению контейнера и реагировать на изменения макета в
containerViewWillLayoutSubviews
метод. - Управляющий модальность. Контроллеры представления представлены и отклонены в очень определенном порядке, и API контроллеров представления обеспечивают это. Механизм представления также гарантирует, что взаимодействие отключено для представлений, которые были скрыты презентацией.
- Поддержание иерархии контроллера представления. Контроллеры представления можно рассматривать как более конкретный тип содержимого контроллера представления, они гарантируют, что представленные контроллеры представления все еще являются частью иерархии контроллера представления. Это необходимо для распространения коллекции признаков, обратных вызовов внешнего вида, отправки
viewWillTransitionToSize:withTransitionCoordinator:
выполнение переходов контроллера представления (включая вложенные презентации) и многое другое. - Управление первыми респондентами. Когда презентация происходит, текущий первый респондент скрывается, а затем восстанавливается после увольнения.