Из представленных вами вариантов мне нравится c) лучший.
Опция a) не дотягивает, потому что игнорирует основную роль контроллеров представления - для управления просмотром содержимого на всю страницу.Использование addSubview
в таких ситуациях, как ваша, требует, чтобы вы перепрыгнули через кучу препятствий, чтобы управлять памятью всех этих объектов в иерархии представлений, и вам бы просто пришлось заново изобретать колесо UIViewController
.
Вариант б) в порядке, но почему-то он никогда не удовлетворяет меня.Просто поменять местами корень вольно-невообразимо кажется рискованным - это то, для чего создан UIViewController, и он, вероятно, сделает это лучше, чем вы или я.В любом случае, если вы это сделаете, вы потеряете все преимущества анимации.Что приводит нас к ...
варианту в).UINavigationController запрограммирован для выполнения работы, требуемой в вашей конкретной ситуации.Вы можете управлять иерархией, используя UINavigationController
- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated
.Вы можете сделать обычный толчок, но это будет держать предыдущий VC в памяти, в то время как ваш основной VC игры находится впереди и требует ресурсов от системы.Короче говоря, я думаю, что ваш в) прост и эффективен.
Как и в случае с пост-сценарием, помните, что есть и другие варианты, кроме вашего a, b, c.Вы можете обойтись с помощью UIPageViewController , хотя я не рекомендую его.iOS 5 представила UIStoryboard как метод для управления пользовательским интерфейсом вашего приложения и UIStoryboardSegue для управления переходами.Посмотрите документы, если вы ориентируетесь на iOS 5, они также могут вам помочь.Но, похоже, вам подойдет простой навигационный контроллер.