2014-01-13 6 views
2

Я сейчас работаю над сложным пользовательским интерфейсом для игры, которая содержит как элементы IB, так и программные созданные элементы. Мой вопрос касается лучших практик, которые будут использоваться при создании интерфейса: я знаю, что я должен избегать значений жесткого кодирования для фрейма представлений, но также, если я позволяю приложению вычислять кадры после размера экрана, результаты не такие хорошо, как я надеюсь.Представления интерфейса IOS - лучшие практики

Теперь я использую сочетание жесткого кодирования и самостоятельного вычисления:

backQuestion = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 760, 400)]; 
    backQuestion.center = CGPointMake(self.view.bounds.size.height/2, self.view.bounds.size.width/2); 
    questionLabel = [[UILabel alloc]initWithFrame:CGRectMake(backQuestion.frame.origin.x+backQuestion.frame.size.width*0.05, backQuestion.frame.origin.y+backQuestion.frame.size.width*0.02, backQuestion.frame.size.width*0.9, backQuestion.frame.size.height*0.35)]; 

Что более опытные разработчики, использующие при создании интерфейсов? Есть ли хорошая статья, которую я должен прочитать?

ответ

0

Как часто я могу предпочесть использовать Interface Builder для создания интерфейсов. Это позволяет мне рисовать интерфейс и видеть потенциальные проблемы в разных размерах и ориентациях. Это также позволяет мне быстро создавать свойства автоматической компоновки. Хотя это можно сделать в коде, это очень трудоемко и создает код, который не очень СУХОЙ.

0

По возможности я стараюсь привязать позиции в коде к позициям, установленным в IB.

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

Вы также можете добавить скрытые виды в IB, которые существуют исключительно для целей интервала (скрытые виды почти не имеют накладных расходов). Затем вы можете получить к ним доступ в viewDidLoad и сохранить свои позиции для использования в расчетах компоновки.

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

Наконец, для проблем, таких как UILabels с верхним выравниванием или представления, которые необходимо изменить на основе их содержимого, подумайте над созданием «умных» подклассов вида, которые изменяют размер или автоматически перестраиваются относительно их братьев и сестер. Например, у вас может быть «StackLabel», который автоматически устанавливает свою собственную высоту, вызывая [self sizetoFit], а затем позиционирует себя ниже предыдущей метки, которую он находит в своем супервизоре. Использование интеллектуальных представлений позволяет избежать необходимости размещения повторяющегося кода макета в контроллере.

(Или вы можете кусать пулю и изучать AutoLayout, конечно.)

Смежные вопросы