К лучшему или к худшему, обычная система для универсального приложения состоит в том, что вы предоставляете две отдельные версии вашей MainWindow NIB; iPad и iPhone имеют разные пропорции и дико различную плотность пикселей, поэтому Apple хочет, чтобы вы рассматривали не просто разрешение пикселей. Вы заметите, что в Xcode 4 у вас есть два отдельных набора «Deployment Info» в вашем проекте и вы можете указать отдельные файлы «Main Interface» там. Здесь также можно указать различные экраны загрузки и значки (перетаскивание проще всего; пусть Xcode гарантирует правильность имен файлов).
Если ваше приложение имеет тот же интерфейс, но настроенный, вполне нормально предоставлять разные NIB, которые назначают те же классы, что и их владельцы. Так, например, Предположим, у вас есть класс MainMenuViewController
, полный обычных IBActions и IBOutlets, затем вы можете создать MainMenuViewController-iPhone.xib и MainMenuViewController-iPad.xib. Оба из них назначат свой класс как MainMenuViewController и будут содержать подходящие элементы управления, подключенные. В вашем iPhone MainWindow NIB вы должны были загрузить этот контроллер представления из MainMenuViewController-iPhone, в iPad MainWindow NIB вы бы установили его для загрузки из MainMenuViewController- IPAD. Поскольку оба приводят к созданию экземпляров одного и того же класса и настраиваются таким образом, чтобы класс мог обращаться к соответствующим элементам управления, вы пишете часть модели своего кода только один раз.
Имея это в виду, все, что вам нужно сделать, это использовать графику iPad в своих NIB iPad, использовать графику iPhone (с @ 2x, обрабатываемой автоматически) в NIB iPhone.
Если вам нужно выполнить какие-либо проверки во время выполнения, вы должны взглянуть на идиому пользовательского интерфейса. Например:
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
// do something with the iPhone resources
}
else
{
// do something with the iPad resources
}
См. здесь для документации по UI_USER_INTERFACE_IDIOM. Предполагая, что вы создаете с последним SDK, это всегда доступно и безопасно для вызова, даже на версиях iOS, предшествующих представлению iPad.