Являются ли модальные контроллеры представления предпочтительным способом замены всего интерфейса на iPad? - PullRequest
2 голосов
/ 02 сентября 2010

В частности, у меня есть что-то похожее на игру с экраном меню, сделанным из стандартных компонентов. Я хочу, чтобы кнопка переключалась на другой контроллер представления, с которым пользователь некоторое время будет взаимодействовать, а затем возвращалась к экрану меню. Похоже, что контроллер меню представляет режим «игры», так как контроллер модального представления является наиболее простым решением, но является ли это лучшим способом по существу заменить весь вид? Сохраняется ли в памяти все меню (которое впоследствии может стать контроллером глубокого навигации или сплит) до тех пор, пока модальный контроллер находится впереди, и об этом следует беспокоиться?

1 Ответ

3 голосов
/ 06 октября 2010

Этот вопрос состоит из двух частей:

Какой метод перехода от одного представления к другому в приложении iPad обеспечивает наилучшее взаимодействие с пользователем?

Какой метод перехода от одного представления к другому проще всего реализовать и лучше всего справляется с управлением памятью?

Я не собираюсь пытаться ответить на первую часть этого вопроса, кроме как для того, чтобы указать вам на «Руководство по интерфейсу Apple iPad», в котором говорится (среди прочего):

Уменьшение полноэкранных переходов

Тесно связывайте визуальные переходы с изменяющимся содержимым. Вместо того, чтобы менять местами новый экран при изменении какой-либо встроенной информации, попробуйте обновить только те области пользовательского интерфейса, которые в ней нуждаются. Как правило, предпочитают переходы отдельных видов и объектов, а не экрана. В большинстве случаев переворачивать весь экран не рекомендуется.

Когда вы выполняете меньше полноэкранных переходов, ваше приложение имеет большую визуальную стабильность, что помогает людям отслеживать, где они находятся в своей задаче. Вы можете использовать элементы пользовательского интерфейса, такие как разделенное представление и всплывающее окно, чтобы уменьшить потребность в полноэкранных переходах.

http://developer.apple.com/library/ios/prerelease/#documentation/General/Conceptual/iPadHIG/DesignGuidelines/DesignGuidelines.html

Однако в вашем случае я бы подумал, что переход в полноэкранный режим вполне уместен (но тогда я не эксперт по пользовательскому опыту).

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

По умолчанию как объекты, используемые представлением меню, так и объекты, используемые модальным представлением, будут храниться в памяти - но самое замечательное в использовании подклассов UIViewController заключается в том, что они имеют встроенную систему управления памятью по умолчанию. Если ваше приложение получает предупреждение памяти, в то время как модальное представление представлено в полноэкранном режиме, представления контроллера представления меню будут удалены, и будет вызван его метод 'viewDidUnload'. Таким образом, в вашей реализации этого метода вы должны освободить любые ненужные объекты и затем воссоздать их по мере необходимости в методе viewDidLoad контроллера представления меню (который будет вызван снова, прежде чем отобразится представление меню).

Это объясняется более подробно в справочнике по классу UIViewController:

Когда появляется предупреждение о нехватке памяти, класс UIViewController очищает свои представления, если он знает, что может перезагрузить или воссоздать их позже. Если это происходит, он также вызывает метод viewDidUnload, чтобы дать вашему коду возможность отказаться от владения любыми объектами, связанными с вашей иерархией представления, включая объекты, загруженные с помощью файла nib, объекты, созданные в вашем методе viewDidLoad, и объекты, созданные лениво в время выполнения и добавлено в иерархию представлений. Как правило, если ваш контроллер представления содержит выходы (свойства или необработанные переменные, содержащие ключевое слово IBOutlet), вы должны использовать метод viewDidUnload, чтобы отказаться от владения этими выходами или любыми другими данными, относящимися к представлению, которые вам больше не нужны.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...